カラムa、b、およびcを持つデータベーステーブルがあるとします。 3つの列すべてについてクエリを実行する予定ですが、特にどの列をクエリしているのかわかりません。 (このような)があり、インデックスが非常検索を高速化することをテーブルに十分な行がありますが、可能なインデックスのすべての順列を作るために間違って感じている:各パーミュテーションのインデックスを作成するよりも、複数の列をインデックスする良い方法はありますか?
a
b
c
a, b
a, c
b, c
a, b, c
は、この問題に対処するためのより良い方法はありますか? (これは、行数を素早く減らすので、私はa、b、cのみをインデックスに登録することができますが、より良い方法があるかどうかは疑問です)
より具体的な例として、現実のデータでは、列は都市、州、および郵便番号です。また、私はMySQLデータベースを使用しています。
これは正解です。 MySQLも同じように動作し、この手法は「左端接頭辞」と呼ばれます。 http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.htmlのMySQLマニュアルから: "テーブルに複数列のインデックスがある場合、インデックスの一番左の接頭辞はたとえば、(col1、col2、col3)に3列の索引がある場合、(col1)、(col1、col2)、および(col1、col2、col3)に索引検索機能があります。 " – zombat
うーん、私はこれを知っていたはずです。 ;)非常に素晴らしい、私はこのショットを与えるだろう。 –
また、a、cが必要かもしれませんが、クエリがどのように見えるかによって異なります。Andriyevが述べたORシナリオをカバーするために、個別のインデックスが必要な場合もあります。 –