MySQLクエリSQLでプレフィックス文字列が一致する面白いケースを見つけました。
私はこのようなテーブルを作成しました。
CREATE TABLE `EpgInfo` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) NULL NOT NULL DEFAUL '',
PRIMARY KEY (`id`),
KEY `title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
次に、長さが20未満のランダムな列タイトルに1,000,000行のデータを挿入しました。
私は次のような3つのSQLを使用しています。
- SQL#1:
select * from EpgInfo2 where title like "快" limit 1;
- SQL#2:
select * from EpgInfo2 where title = "中" limit 1;
- SQL#3:
select * from EpgInfo2 where title like "中" limit 1;
そして私はそれを見つけました:
- SQL#1のコストは0.2秒です。
- SQL#2とSQL#3のコストは0.0秒です。
%handl%
クエリプランを見つけるためにshowstatusを使用しましたが、SQL#1はすべてのインデックスデータをスキャンしましたが、SQL#2とSQL#3はスキャンしませんでした。
なんで?