はじめに:ここで話すことはたくさんあります。SQL は複雑であるため、クエリを完全に支援することは誰にも不可能です。クエリが何であるか、テーブルがどれくらい大きいか、データベースが何であるかが重要です。使用しているシステムです。インデックスとは何か、またはその使用方法がわからない場合は、こちらを参照してください:データベースのインデックス作成はどのように機能しますか? .
予防措置:繰り返しになりますが、システムの DBA がいる場合は、特に稼働中のシステムでは、インデックスを作成する前に DBA に確認してください。あなたが彼らに親切であれば、彼らは助けることさえできます. システムが他の多くの人によって使用されている場合は、インデックスなどを変更する前に注意してください。データが複数のクエリ タイプに使用されている場合は、競合または重複する大量のインデックスを作成していないことを確認してください。
構文。標準 (SQL92) では次を使用しますCREATE INDEX [index name] ON [table name] ( [column name] )
。この構文は、ほとんどすべてのシステムで機能するはずです。テーブルにインデックスが 1 つだけ必要で、クラスター化インデックスがまだない場合は、次を使用できます。CREATE [Unique] Clustered INDEX [index name] ON [table name] ( [column name] )
- 同じ値を持つ複数のアイテムが存在できない場合は一意にする必要があります。これが機能しない場合は、詳細についてこの記事を参照してください:データベース列のインデックスを作成する方法.
どのテーブルにインデックスを付ける必要がありますか? 特にデータが静的であるか、新しい値のみを取得する場合は、クエリに使用されているテーブルが最適な候補です。テーブルがクエリに含まれていて、結合ステートメントがある場合、結合される列にインデックスが必要になる可能性があります。
どの列に索引を付ける必要がありますか? 最適なインデックスの選択と、データベースを適切にインデックス化する方法について書かれた完全な本があります。問題を深く掘り下げたくない場合のインデックス作成の基本的な経験則は、次の順序でインデックスを作成することです。
- 結合述語 (
on Table1.columnA=Table2.ColumnA and Table1.columnB=Table2.ColumnQ
)
- フィルタされた列 (
where Table1.columnN=’Bob’ and Table1.columnS<20
)
- 並べ替え / グループ化 / など (可能であれば、並べ替え/グループ化に使用される列はすべてインデックスに含める必要があります。)
また:
これらすべてを実行すると、順調に進むことができます。しかし、このようなことが定期的に必要な場合は、それを学んでください! 本を購入し、オンラインで読み、情報を見つけます。そこにはたくさんの情報があり、それは深いトピックですが、何をしているのかを知っていれば、クエリをより良くすることができます.