タイトルの通りIN句の数による実行計画の変化を確認する
100件指定、1000件指定、10000件指定の3パターンを確認する
-- 長いのでIN句は一部省略 explain SELECT * FROM `companies` WHERE `companies`.`name` IN ('1','2','3','4','5','6','7','8','9','10',,,'100')
indexが効いていることがわかる
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | companies | NULL | range | idx_name | idx_name | 1023 | NULL | 100 | 100 | Using index condition |
-- 長いのでIN句は一部省略 explain SELECT * FROM `companies` WHERE `companies`.`name` IN ('1','2','3','4','5','6','7','8','9','10',,,'1000')
indexが効いていることがわかる
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | companies | NULL | range | idx_name | idx_name | 1023 | NULL | 1000 | 100 | Using index condition |
-- 長いのでIN句は一部省略 explain SELECT * FROM `companies` WHERE `companies`.`name` IN ('1','2','3','4','5','6','7','8','9','10',,,'10000')
typeが「ALL」になっていてテーブルスキャンになっていることがわかる
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | companies | NULL | ALL | idx_name | NULL | NULL | NULL | 271560 | 50 | Using where |