做初中题赚钱的网站,开发者模式怎么关闭vivo,为推广网站做的宣传活动,最好看的中文字幕国语电影有哪些如果不断地删除历史数据和新增数据#xff0c;MySQL有时会选错索引。 选择索引是优化器的工作#xff0c;优化器优化时会考虑的因素#xff1a;扫描行数、是否需要排序、是否使用临时表 MySQL通过统计索引上的基数#xff0c;作为索引的区分度。 统计方法时采样统计#x…如果不断地删除历史数据和新增数据MySQL有时会选错索引。 选择索引是优化器的工作优化器优化时会考虑的因素扫描行数、是否需要排序、是否使用临时表 MySQL通过统计索引上的基数作为索引的区分度。 统计方法时采样统计InnoDB默认选择N个数据页统计这些页面上的不同值得到一个平均值 然后乘以这个索引的页面数就得到了这个索引的基数。 举例 取n 3个数据页统计假设共有10个索引数据页 page110个不同值 page2: 20个不同值 page3: 15个不同值 索引基数(102015)/3 * 10 150;
如果发现explain的结果预计的rows值和实际情况相差较大可以使用analyze table t命令恢复重新统计索引信息
当索引选择出现问题 方法一采用force index 强行选择一个索引 select * from t force index(a) where a between 1 and 1000 and b between 5000 and 10000 order by b limit 1; (如果优化器没有选择正确的索引force index 就对其矫正) 开发的时候不会先写上force index等到出现问题时再去修改语句 方法二修改语句引导MySQL使用我们期望的索引 方法三在一些场景下新建一个更加合适的索引来提供给优化器做选择或者删除掉误用的索引