zoukankan      html  css  js  c++  java
  • MySQL索引失效的几种场景

    MySQL索引失效的几种场景

    一、总结

    一句话总结:

    1、列类型是字符串,查询条件未加引号。
    2、使用like时通配符在前
    3、在查询条件中使用OR
    4、对索引列进行函数运算

    1、列类型是字符串,查询条件未加引号。
    card_code列是身份证号,数据类型是varchar,在没有将证件号码用引号括起时不会使用索引,此时索引失效。

    2、使用like时通配符在前
    我们可以看到通配符在后面时效率不受影响,说明此时索引未失效,通配符在前时索引失效。

    3、在查询条件中使用OR
    查询条件中使用or会使索引失效,要想是索引生效,需要将or中的每个列都加上索引。

    4、对索引列进行函数运算

    二、MySQL索引失效的几种场景

    转自或参考:MySQL索引失效的几种场景
    https://mp.weixin.qq.com/s?__biz=MzU1NTEzMDAxNQ==&mid=2247483743&idx=1&sn=2e07671c74bc8275e79052e6379ef360&chksm=fbd84cafccafc5b99fa54bf452f0cd4344e9594bce85c6d1e86daf74b0147e289c5212c16257&scene=21#wechat_redirect

    我们都知道建立索引能够提高查询效率,那么是不是任何情况下都能提高呢,当然不是的的,下面我们就来列举一些常见的索引失效的场景。

    借用上一篇文章的dm_person_info表

    在card_code列没加索引的时,查询时间如下,大概都在0.07秒。


     我们来加上索引试试,加上后查询效率高了许多。



     在正确使用索引的情况下,查询一行数据的时间不到10毫秒,所以显示0.00 sec .

    1.列类型是字符串,查询条件未加引号。

    card_code列是身份证号,数据类型是varchar,在没有将证件号码用引号括起时不会使用索引,此时索引失效。


     2.未使用该列作为查询条件

    索引建在card_code列上,使用tel列作为查询条件,此时该索引未被使用到,也可以说是失效的。


    3.使用like时通配符在前

    我们可以看到通配符在后面时效率不受影响,说明此时索引未失效,通配符在前时索引失效。


    4. 在查询条件中使用OR

    查询条件中使用or会使索引失效,要想是索引生效,需要将or中的每个列都加上索引。


    5.对索引列进行函数运算


     6.联合索引ABC问题

    Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是index (a,b,c),可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c或c进行查找 。

    这里只介绍6种比较常见的失效场景,实际上还有很多,我们在实际开发中要注意到这些问题,不能掉到坑里去了,哈哈^_^  。

     
  • 相关阅读:
    【465】词干提取与词形还原
    【464】文本转字符向量bag of words
    【462】淘宝个人简介
    Docker 图形化页面管理工具使用
    Docker 简介与shell操作使用
    Spring Boot 入门案例与配置说明
    项目管理工具Maven的安装与使用
    Git(五)IDEA应用Git
    Git(四)Git的分支管理
    Git(三)Git的远程仓库
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12665109.html
Copyright © 2011-2022 走看看