7

私は自分のデータベースに次のようなクエリを持っています:

SELECT * FROM expenses WHERE user_id = ? AND dated_on = ?

user_id列と列の両方でテーブルにインデックスを追加しましたdated_on。を使用してインデックスを検査すると、値が 1 のSHOW INDEXES FROM expenses行と値が 2 の行の 2 つの行があります。seq_in_indexseq_in_index

私の質問は、2 つの WHERE 句の 1 つだけを使用するクエリを送信した場合です。

SELECT * FROM expenses WHERE user_id = ?

user_id列にのみインデックスを付ける別のインデックスを作成する利点はありますか、または上記のuser_id/dated_onインデックスは同様に効率的に使用されますか?

最後に、クエリを使用する場合はどうですか:

SELECT * FROM expenses WHERE dated_on = ?

seq_in_indexこの状況で、値 2 はインデックスの使用とパフォーマンスにどのように影響しますか?

4

2 に答える 2

8

MySQLは、インデックスの左側の部分を使用できます。

あなたの例SELECT * FROM expenses WHERE user_id = ?では、インデックスを使用しますが、使用しSELECT * FROM expenses WHERE dated_on = ?ません。

3 列のインデックスの場合、A、B、C はWHERE A = ? AND B = ?A と B のインデックスをWHERE A = ? AND C = ?使用しますが、A のインデックスのみを使用します。

于 2008-11-04T12:40:52.573 に答える
5

user_id と dated_on のインデックスが実際にその順序 (user_id が最初) である場合、user_id クエリにも使用されます。EXPLAIN を使用して、クエリの実際の戦略を確認できます。

于 2008-11-04T12:29:15.577 に答える