开发者社区> 问答> 正文

线上突然发现mysql的sql语句不能使用索引了

已解决

之前相同的sql语句能使用索引,但是现在不能了。啥原因?

展开
收起
exinnet 2016-01-25 16:58:07 3831 0
2 条回答
写回答
取消 提交回答
  • 淘宝技术专家
    采纳回答

    可能是由于mysql的cardinality异常导致的。
    Cardinality解释
    官方文档的解释:
    An estimate of the number of unique values in the index. This is updated by running ANALYZE TABLE or myisamchk -a. Cardinality is counted based on statistics stored as integers, so the value is not necessarily exact even for small tables. The higher the cardinality, the greater the chance that MySQL uses the index when doing
    总结一下:

    它代表的是索引中唯一值的数目的估计值。如果是myisam引擎,这个值是一个准确的值。如果是innodb引擎,这个值是一个估算的值,每次执行show index 时,可能会不一样
    创建Index时(primary key除外),MyISAM的表Cardinality的值为null,InnoDB的表Cardinality的值大概为行数;
    值的大小会影响到索引的选择
    创建Index时,MyISAM的表Cardinality的值为null,InnoDB的表Cardinality的值大概为行数。
    可以通过Analyze table来更新一张表或者mysqlcheck -Aa来进行更新整个数据库
    可以通过 show index 查看其值

    #参考文档
    mysql的cardinality异常,导致索引不可用

    2019-07-17 18:26:29
    赞同 1 展开评论 打赏
  • 这里问题没有表述全啊,存储引擎选的那种,MyISAM和InnoDB?不能了,索引有没有什么变化?

    2019-07-17 18:26:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像