MySql索引建立原则及失效条件

本文详细介绍了MySQL索引的建立原则,包括选择唯一性索引、为常用查询条件建立索引、考虑排序和分组操作、限制索引数量等。同时,强调了索引的维护和选择高区分度列的重要性,以及避免索引失效的多种情况,如使用OR条件、LIKE查询以%开头等。通过对索引策略的深入理解,可以显著提升数据库查询效率。
摘要由CSDN通过智能技术生成

MySql索引建立原则

  1. 选择唯一性索引
    唯一性索引的值是唯一的,可以更快的通过该索引来确定某条数据。例如:学生表中学号是唯一的,为该字段建立索引可以很快的确定某个学生的信息;如果使用姓名的话可能存在同名的情况,从而降低查询速度。

  2. 为经常需要排序、分组和联合操作的字段建立索引
    经常需要order by、group by、distinct、union等操作的字段,排序会浪费很多时间,如果为其建立索引可以有效避免排序操作

  3. 为常作为查询条件的字段建立索引
    如果某个字段经常用来作为查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为此字段建立索引可以提高整个表的查询速度

  4. 限制索引的数目
    每个索引需要占用磁盘空间,索引越多,需要的磁盘空间就越大,修改表时对索引的维护会越麻烦。因此索引的数目不是越多越好,越多是索引会使更新表变更更浪费时间

  5. 尽量使用数据量少的索引
    如果索引很长,那么查询的速度会受影响。例如:对一个char(100)类型的字段进行全文检索需要的时间肯定比对char(10)类型的字段需要的时间更多。

  6. 尽量使用前缀来索引(字段值长,使用值的前缀来建立索引)
    如果索引字段的值很长,最好使用值的前缀来索引。例如:TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度

  7. 最左前缀匹配原则
    MySQL会一直向右匹配直到遇到范围查询(>,<, between,like)就停止匹配;=和in可以乱序。例如:a =”1” and b=”2” c>“3” and d = “4” 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

  8. 删除不再使用或者很少使用的索引
    表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。

  9. 尽量选择区分度高的列作为索引
    区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就 是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录

  10. 索引列不能参与计算
    比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本 太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);

  11. 尽量扩展索引而不是新建
    比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可

MySQL索引失效的情况

  1. 条件中有or(除非or的每一列都有索引)

  2. 多列索引未使用第一列

  3. like查询以%开头

  4. 隐式转换,字符串类型未使用引号

  5. 索引列进行计算

  6. not in/not exist

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值