MySQL (5.5.24、WinXP) でインデックスをいじっていますが、使用時にサーバーが 1 つのインデックスを使用しない理由がわかりませんLIKE
。
例は次のとおりです。
テストテーブルを作成しました:
create table testTable (
id varchar(50) primary key,
text1 varchar(50) not null,
startDate varchar(50) not null
) ENGINE = innodb;
次に、 にインデックスを追加しましたstartDate
。(列が日付時刻ではなくテキストである理由を聞かないでください。これは単純なテストです):
create index jeje on testTable(startdate);
analyze table testTable;
その後、約 200,000 行を追加しました。startDateには 3 つの値がありました。(それぞれの登場回数の3分の1..7万回近く)
したがって、次のようにEXPLAINコマンドを実行すると:
explain select * from testTable use index (jeje) where startDate = 'aaaaaaaaa';
答えは次のとおりです。
id = 1
select_type = SIMPLE
type = ref
possible_keys = jeje
key = jeje
rows = 88412
extra = Using where
したがって、キーが使用され、行数が 200,000/3 に近いため、すべて問題ありません。
問題は、クエリを次のように変更した場合 (「=」を「LIKE」に変更するだけ):
explain select * from testTable use index(jeje) where startDate LIKE 'aaaaaaaaa';
この場合、答えは次のとおりです。
id = 1
select_type = SIMPLE
type = ALL
possible_keys = jeje
key = null
rows = 176824
extra = Using where
そのため、インデックスは現在使用されていません (キーは null で、完全なテーブルに近い行.. type=all が示唆するように)。
MySQL のドキュメントによると、LIKE DOES はインデックスを使用します。
それで、私はここで何を見ていませんか?問題はどこだ?
ご協力いただきありがとうございます。