2011-01-17 14 views
2

何が望ましいですか? 2つの列とINDEXを一緒に使用するか、新しい列とINDEX列を作成しますか?たとえば、次のように続いて2つの列は1つの列、または1つの列はインデックスされます

INDEX(user_id, key)

は実行します。

SELECT value FROM preferences WHERE user_id = 1 AND key = 'something';

それともreferenceという名前の別の列を作成し、その値1_somethingを含み、その後、実行します:

SELECT value FROM preferences WHERE reference = '1_something';

よろしくお願いいたします。 アンドリュー

答えて

2

すべてのインデックス作成と同様に、状況によって異なります。

個人的に私は2つの列を選択します.1つのインデックスバージョンは、データについて考えるときにはより正確で、クエリーをより明確にし、範囲選択を可能にします。複合参照列は、 2つの別個のものはint型とvarchar型ですが、2つの比較であっても高速であると信じています。

keyを使わないでuser_idをクエリしますか? IEは特定のユーザーのすべての設定を返します。

特定の設定のすべてのユーザーに対して範囲クエリを実行するか、または1_somethingを効率的に使用しませんか。

、あなたは、テーブルがあることが予想されているどのように大きな、サンプル値を実行したい場合があり、他のどのようなクエリを知らなくても、一定にすることはできませんなどなど

(値の範囲==非効率的な反対のvarcharを比較)
0

最初のもの(2列のインデックス)がはるかによく見えます。このインデックスは、user_idのインデックスを利用するクエリにも使用されます。 1つの余分な列がある場合は、user_idまたはsomethingが変更されるたびに値を同期させる必要があります。

0

最初の方が常に優れています.1つのカラムuser_idで照会している場合でも、同じインデックスを使用できます。複合キー索引を使用すると、より良いキー検索も可能になります。

関連する問題