mysql选错索引

为什么会出现选错索引

优化器会判定当前执行的最优方式,主要包括考虑扫描的行数、是否使用临时表、是否需要排序等;

优化器的逻辑

  扫描行数是优化器考虑的指标之一,那扫描的行数从哪来?基于采样统计,即这个统计信息就是索引的“区分度”。显然,一个索引上不同的值越多,这个索引的区分度就越好。而一个索引上不同的值的个数,我们称之为“基数”(cardinality)。也就是说,这个基数越大,索引的区分度越好。
  但是,采样会导致统计数据不准确,通过show index from table看下基数统计信息,为了解决统计信息不对,可通过analyze table t 命令修正,用来重新统计索引信息。

问题如何解决

  当出现索引选错的情况下,可以根据explain看下sql执行情况。对于索引选错的时候:1是可以使用force index进行强制走索引,2是可以考虑修改语句,引导 MySQL 使用我们期望的索引,3是删除不必要的索引或者增加合适的索引

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容