索引统计更新机制
解决
analyze table 表名
优化器存在选错索引的可能性
解决办法:
1、强制选择索引 force index
eg: select * from t force index(a) where a between 10000 and 20000;
缺点:
这么写不优美;
如果索引改了名字,这个语句也得改,显得很麻烦;
迁移数据库后,语句可能不兼容;
==》还是变更的及时性问题
2、引导mysql使用期望的索引
eg: order by b limit 1
可调整为 order by b,a limit 1
缺点:
order by b limit 1 和 order by b,a limit 1 都会返回 b 是最小的那一行,逻辑上一致,才可以这么做
==》不是通用的优化手段
3、在有些场景下,可新建一个更合适的索引供优化器选择,或删除误用的索引