は、私は3列(C1、C2、C3)とテーブル(T1)をしましたと仮定し、私はこのようなインデックスを追加しました:クエリの最後のフィールドがMySQLの場合、必要なインデックスはテーブルのカラムですか - MySQL?
ALTER TABLE `t1` ADD INDEX `IDX_c1_c2` USING BTREE (`c1`, `c2`);
私は私が作る場合は、このクエリがインデックスを使用することを知っている
とを
SELECT * FROM `t1` where c1 = "foo" AND c2 = "bar"
しかし、何このクエリについて?:
SELECT * FROM `t1` where c1 = "foo" AND c2 = "bar" AND c3 = "foobar"
MySQLのエンジンは、クエリを改善するために、またはインデックスを無視するために、インデックスを使用します:完璧な作品?つまり、クエリ全体がインデックスと一致してインデックスを使用する必要があります。または、クエリの最初の2つのカラムのインデックスを利用できます。
[UPDATE] - 最後のクエリは、実際には、この(日付は単なる一例である)のようになります。
SELECT * FROM `t1` where c1 = "foo" AND c2 = "bar" AND c3 > "2016-11-26 07:37:47"
答えをいただきありがとうございます、投稿を編集しました。更新を見て、最後のクエリは日付の '>'演算子を使用します。私はそれが最初の2つの列で検索を洗練させたいと思うので、日付を見るために結果のサイズがずっと小さいので、それは良いアイデアのインデックスではないと思います。 – Fco
私が知る限り、索引の先頭には2つしかありません。更新するフィールドが増え、スペースが多く消費されるため、書き込み操作に時間がかかります。それ以外には問題はありません。 3つすべてがクエリで実行されている場合は、3番目の列インデックスを作成する際に問題が表示されません。しかし、あなたのシステムが既存の設計とうまく動作しているなら、今すぐ変更しないでください。 –
ハッシュインデックスは、ポイントクエリに対してBTreeよりわずかに高速です。しかし、ハッシュはMySQLでは利用できません。 (OK、1つの例外があります。) –