2017-05-11 19 views
1

私は数百万のレコードを持つテーブルを持っています。2つの異なる値を持つ列にインデックスを作成します。

カラムの1つに2つの値 '0'と '1'しかありません。

私は、列の値が '0'であるレコードのみに関心があり、それらのレコードから何らかの処理を行っています。

値 '0'を含むレコードの数が数百になることを考慮すると、その列にインデックスを作成することをお勧めします。

それ以来、インデックスは2つの値 '0'を持ち、実際のレコードに対して何百ものrefrencesを持ち、対応する何百万ものレコードを参照すると '1'にな​​ります。

ここで、私は '1'とその参照を気にしないので、まずインデックスを使用すべきですか?

+2

どのRDMSをお使いですか? SQLサーバーでは、フィルターされた索引を使用できます。 – Kevin

答えて

1

ソフトウェアエンジニアリングを含むエンジニアリング分野では、推測するのではなく、結果を測定する必要があります(または、インターネット上の人々に適切なことを教えてください)。

検索する値を考慮して、EXPLAINを使用して、SQLデータベースがさまざまなクエリを最適化する方法を調べる必要があります。

0のローと1のローの不均衡な数があるため、データベースが1つまたは他の値を検索するクエリを最適化する方法に大きな違いが生じることは間違いありません。

とにかく、行の99%を訪問すると1を検索している場合、索引を読み込むオーバーヘッドはおそらく無駄になります。したがって、良いオプティマイザはインデックスをスキップして、テーブルを直接読み込んで、一致しない行の少数を破棄する必要があります。

ただし、マイナー値0を検索すると、オプティマイザはインデックスを使用すると有益であることを伝えることができます。

これを確認するには、EXPLAINを使用します。 EXPLAINを使用して両方の照会(0を検索して1を検索)を試し、その違いがオプティマイザの計画にあることを確認してください。

使用しているSQLデータベースのブランドについて具体的ではないと判断したため、EXPLAINの構文についてはあいまいです。あなたは "sql"と "database-indexes"という質問にタグを付けましたが、 "sql-server"や "mysql"や "postgresql"やあなたが使っているものはタグ付けしませんでした。

EXPLAINは標準SQL言語の一部ではないため、各データベースはEXPLAINをわずかに異なる方法で実装します。具体的な回答は、使用するSQLデータベースによって異なります。

関連する問題