問題タブ [indexing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
162 参照

sql - 一意のフィールドで検索するときに LIMIT を使用する

次のようなテーブル構造があるとします。

ユーザー名で検索するときに LIMIT キーワードを使用することに意味はありますか、それとも DB は結果が 1 つしかない可能性があることを認識できるほど賢いので、結果が見つかったら検索を停止しますか?


更新:回答ありがとうございます。彼らは啓発的でした。不要でLIMIT 1はありますが、クエリを実行しても害はなく、おそらく読みやすさが向上するようです (1 つだけが返されることを知るために DB スキーマを調べる必要はありません)。JRの答えに対する特別な叫び声-インデックスでそれができることさえ知りませんでした。

また、ここで見つけた同様の質問があり、これも役立つ場合があります。

0 投票する
5 に答える
107918 参照

sql - NULL 列に一意のインデックスを作成する方法は?

SQL Server 2005 を使用しています。NULL を許可しながら、列の値を一意に制限したいと考えています。

私の現在のソリューションには、次のようなビューの一意のインデックスが含まれます。

より良いアイデアはありますか?

0 投票する
6 に答える
80083 参照

sql - postgres でテーブル (インデックスを含む) をコピーする

postgres テーブルがあります。そこからいくつかのデータを削除する必要があります。一時テーブルを作成し、データをコピーし、インデックスを再作成し、必要な行を削除するつもりでした。この元のテーブルがデータのソースであるため、元のテーブルからデータを削除できません。ある場合には X の削除に依存する結果を得る必要があり、別の場合には Y を削除する必要があります。

ただし、テーブルを再作成して再度コピーし、インデックスを再作成するのは少しばかげているようです。「構造、データ、およびインデックスを含む、このテーブルの完全な個別のコピーが必要です」と通知するためにpostgresにとにかくありますか?

残念ながら、PostgreSQL には「CREATE TABLE .. LIKE X INCLUDING INDEXES」がありません。

0 投票する
4 に答える
23545 参照

grails - Grails インデックス ページのベスト プラクティス

grailsアプリでインデックスページのモデルを設定する正しい方法は何ですか? デフォルトでは IndexController はありません。これとあれのリストをモデルに取得するための他のメカニズムはありますか?

0 投票する
4 に答える
835 参照

sql - 個々のインデックスと複数のフィールド インデックス

現在、招待を追跡するために使用するテーブルがあります。インデックス化された電子メール フィールドがありますが、ユーザーが新しいレコードの電子メールを追加するときに指定できる 3 つのオプション キーもあります。重複は許可されないため、電子メールとオプションのキーが既に存在するかどうかを照会する必要があります。現在、キーが指定されている場合、キーは select ステートメントにのみ追加されます。通常、メールのみが指定され、インデックスを使用するとかなり迅速に動作します。キーが追加されると、パフォーマンスが低下します。

3 つのインデックスを追加すると、他の操作のパフォーマンスに影響しますか? この場合、パフォーマンスに影響を与えたくないため、キーはおそらくあまり使用されません。

  • 電子メール、キー 1
  • 電子メール、キー 1、キー 2
  • 電子メール、キー 1、キー 2、キー 3

もう 1 つのアイデアは、キーを 1 つ追加することです。

  • 電子メール、キー 1、キー 2、キー 3

次に、ルックアップで常に 3 つのキーすべてを使用します (例: key1 = mykey AND key2 is NULL AND key3 is NULL)。

関連項目

完全な重複投稿

0 投票する
6 に答える
66891 参照

oracle - Oracle インデックスを選択して最適化する方法は?

インデックスを作成するための一般的な規則があるかどうかを知りたいです。このインデックスに含めるフィールドを選択するにはどうすればよいですか、またはそれらを含めない場合はいつですか?

常に環境とデータ量に依存することはわかっていますが、Oracle でインデックスを作成することについて、世界的に受け入れられているルールを作成できるかどうか疑問に思っていました。

0 投票する
4 に答える
4258 参照

sql-server - SQL Server で UNIQUE インデックスを "インデックス" または "制約" として作成することの違いは何ですか?

UNIQUE になる列 (ただし、テーブルの主キーではない) にインデックスを作成する場合、SQL サーバーではいくつかのオプションを選択できます。

1) 制約またはインデックスを選択できます。
これは、制約として設定すると、クエリ時に使用されず、書き込み時にのみ使用されることを意味すると推測しています。ただし、SQL Server がその制約を強制するための唯一の効率的な方法は、実際にインデックスを作成することです。このオプションの用途は何ですか?

2) また、「インデックス」として設定すると、重複キーを無視するように指定できます。これは私にとって最も不可解です...これは、
制約の反対を意味していると思います。おそらく、「クエリ時には使用するが、書き込み時にはチェックしないでください」という意味です。
しかし、なぜ UNIQUE として設定するのでしょうか?
SQL Server が実行できる最適化がいくつかあると思いますが、それをよりよく理解したいと思います。

SQL Serverがこれらのオプションで何をするのか正確に知っている人はいますか?
インデックスを一意に設定し、重複キーを無視するユースケースは何ですか?

注: これは SQL Server 2000 用です。


編集:しかし、あなたが言ったことによると...制約を作成すると、制約のフィールドを使用してフィルタリングするクエリを高速化するために使用されますか?

ありがとう!

0 投票する
4 に答える
278 参照

sql-server - 新しいデータベース テーブルのインポート

私がいるところには、大規模な AIX メインフレームで実行されるメイン システムがあります。レポートと操作を容易にするために、メインフレームから SQL Server への夜間のダンプがあり、50 ほどのクライアントのそれぞれが同一のスキーマを持つ独自のデータベースに存在します。このダンプは、毎晩完了するのに約 7 時間かかります。これについて私たちができることは実際には何もありません。

SQL Server にダンプした後、それを使用して他の多くの日常的な手順を実行します。これらの手順の 1 つは、データを一種の管理レポート サンドボックス テーブルにインポートすることです。これは、さまざまなデータベースの特に重要なテーブルのレコードを 1 つのテーブルに結合し、SQL を知らない管理者がアドホック レポートを実行するために使用できるようにするものです。システムの残りの部分をホースアップする必要はありません。これもまた、ビジネス上の問題です。マネージャーはそれを望んでおり、私たちがそれを実装することを確認する権限を持っています。

このテーブルのインポート プロセスは、それだけで数時間かかります。50 のデータベースにまたがる約 4,000 万件のレコードを約 400 万件のレコードにフィルター処理し、検索用に特定の列にインデックスを付けます。数時間経ってもまだ初期ロードの 3 分の 1 未満ですが、夜間の処理の時間がなくなりつつあります。メインフレームのダンプは制御していませんが、これは制御しています。そのため、既存の手順を改善する方法を探す任務を負っています。

現在のところ、各クライアント データベースからすべてのデータをロードし、後で 1 つのステップでインデックスを作成する方が高速であるという考え方があります。また、長時間実行された場合に他の重要なシステムが停滞するのを回避するために、いくつかの大規模なクライアントが常に最初に実行されるように設定されています (テーブルのメイン インデックスは clientid フィールドによって決まります)。私たちが始めているもう 1 つのことは、各クライアントを順番にロードするのではなく、一度に数台のクライアントから同時にデータをロードすることです。

私の質問は、このテーブルをロードする最も効率的な方法は何でしょうか? 後で索引付けする方が良いと考えるのは正しいですか? それとも、データをインポートする前にインデックスを作成する必要がありますか? ページの大規模な並べ替えを避けるために、大きなクライアントを最初にロードするのではなく、インデックス順にテーブルをロードする必要がありますか? 並行してロードすると、一度に大量のディスク アクセスが発生したり、順序を制御する機能が失われたりして、事態が悪化する可能性はありますか? 他のアイデアはありますか?

更新
さて、何かが起きています。日中にいくつかのベンチマークを行うことができました。インデックスが操作の最初に作成されるか終了時に作成されるかにかかわらず、読み込み時間にまったく違いはありませんが、インデックス自体を構築する時間を節約できます (コースは、テーブルにデータがなくてもほぼ瞬時に構築されます)。

0 投票する
4 に答える
2752 参照

mysql - 2 つのフィールドに「両面」一意のインデックスを作成する方法は?

次のようなテーブルの 2 つのフィールドに一意のインデックスを効率的に作成するにはどうすればよいですか? create table t (a integer, b integer);

ここで、2 つの異なる数値の一意の組み合わせは、表の同じ行に複数回出現することはできません。

つまり、a=1 かつ b=2 であるような行が存在する場合、a=2 で b=1、または a=1 で b=2 である別の行は存在できません。言い換えれば、2 つの数字はどのような順序でも 2 回以上一緒に現れることはありません。

そのような制約が何と呼ばれているのかわからないため、タイトルに「両面一意インデックス」という名前が付けられています。

更新:列 (a、b) に複合キーがあり、行 (1,2) がデータベースに存在する場合、別の行 (2,1) をエラーなしで挿入できます。私が探しているのは、同じ数字のペアが任意の順序で複数回使用されるのを防ぐ方法です...

0 投票する
2 に答える
3768 参照

sql-server - インデックスに正しい列があることを確認するために使用できるクリーンなT-SQLクエリはありますか?

インデックスに正しい2つの列が定義されているかどうかを確認するDBアップグレードスクリプトを作成しています。そうでない場合、または1つしかない場合は、ドロップして(インデックスを変更する方法はありますか?)、両方を使用して再作成します。