由于某种原因,MySQL 5.6会进行全表扫描,而MySQL 5.1则不会。为什么会发生这种情况?
编辑:两个表都有相同的精确索引。
关于MySQL 5.1
mysql> explain SELECT `kv`.`key`, `kv`.`value` FROM `kv` WHERE `kv`.`key` LIKE BINARY 'weit-149411-%';
+----+-------------+--------------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | kv | range | PRIMARY | PRIMARY | 192 | NULL | 182 | Using where |
+----+-------------+--------------+-------+---------------+---------+---------+------+------+-------------+关于MySQL 5.6
mysql> explain SELECT `kv`.`key`, `kv`.`value` FROM `kv` WHERE `kv`.`key` LIKE BINARY 'weit-149411-%';
+----+-------------+--------------+-------+---------------+---------+---------+------+-------------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+---------------+---------+---------+------+-------------+-------------+
| 1 | SIMPLE | kv | ALL | PRIMARY | NULL | NULL | NULL | 108364642 | Using where |
+----+-------------+--------------+-------+---------------+---------+---------+------+-------------+-------------+发布于 2016-07-23 14:35:57
发布于 2014-08-19 15:01:54
您对5.1实例的统计数据可能会失效,并且可能会在该表中的行数减少时收集。
建议:在5.6中,设置全局innodb_stats_persistent_sample_pages=300;分析表;检查查询执行情况。
https://stackoverflow.com/questions/25037823
复制相似问题