精华内容
下载资源
问答
  • sql索引失效几种情况 1、使用 != 或者 <> 导致索引失效 2、类型不一致导致索引失效 3、函数导致索引失效 4、运算符导致索引失效 5、模糊搜索导致索引失效 6、NOT IN、NOT EXISTS导致索引失效, in 是走索引...

    sql索引失效的几种情况

    1、使用 != 或者 <> 导致索引失效
    2、类型不一致导致索引失效
    3、函数导致索引失效
    4、运算符导致索引失效
    5、模糊搜索导致索引失效
    6、NOT IN、NOT EXISTS导致索引失效,
    in 是走索引的
    7、IS NULL走索引,IS NOT NULL不走索引

    explain sql;
    explain显示了MySQL如何使用索引来处理select语句以及连接表。
    explain显示了很多列,各个关键字的含义如下:

    table:显示这一行的数据是关于哪张表的;

    type:显示连接使用了何种类型。从最好到最差的连接类型为:const、eq_reg、ref、range、indexhe和ALL;

    possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从where语句中选择一个合适的语句;

    key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MySQL会选择优化不足的索引。这种情况下,可以在Select语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MySQL忽略索引;

    key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好;

    ref:显示索引的哪一列被使用了,如果可能的话,是一个常数;

    rows:MySQL认为必须检查的用来返回请求数据的行数;

    Extra:关于MySQL如何解析查询的额外信息

    MySQL官方文档介绍,地址:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html

    展开全文
  • 数据库索引失效几种情况

    千次阅读 2020-04-20 15:48:08
    一、什么是索引? 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来...二、索引失效几种情况 1.如果条件中有多个字段使用or,即使其...

    一、什么是索引?

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

    索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。

     二、索引失效的几种情况

          1.如果条件中有多个字段使用or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)。多条件查询用同一字段时使用or索引会生效。

    注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。

      2.对于多列索引,没有使用的第一部分,则不会使用索引,建立了联合索引,没有使用联合索引中的第一个索引搜索时,就不会使用索引。

     3.like查询是以%开头

     4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

    5、where 子句里对索引列上有数学运算,用不上索引

    6、where 子句里对有索引列使用函数,用不上索引

    7、如果mysql估计使用全表扫描要比使用索引快,则不使用索引,比如数据量极少的表。

    8、WHERE字句的查询条件里有不等于号(如:WHERE column!=...),MYSQL将无法使用索引。

     

    温馨提示:查看索引的使用情况,

    运行sql语句:show status like ‘Handler_read%'
    注意:
    handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。
    handler_read_rnd_next:这个值越高,说明查询低效。

     

    三、什么情况下不推荐使用索引?

    1) 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引

    比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。

    2) 频繁更新的字段不要使用索引

    比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。

    3) 字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引

    只有在where语句出现,mysql才会去使用索引

    4) where 子句里对索引列使用不等于符号 “<>”,使用索引效果一般

     

    四、总结

    索引失效的几种情况:

    1.sql多条件查询语句中带有 or,并且多个字段都没有索引;
    2.复合索引未用左列字段;
    3.like以%开头;
    4.字符串字段的值没加引号“”;
    5.where中索引列有加减乘除运算;
    6.where中索引列使用了函数运算;
    7.如果mysql觉得全表扫描更快时(数据少);

    8.where字句的查询条件里有不等于号(如:WHERE column!=...),MYSQL将无法使用索引;

     

    不推荐使用索引的几种情况:

    1.数据唯一性差,一个字段的取值只有几种时;
    2.频繁更新的字段不用;
    3.where中不用的字段;
    4.索引使用不等于符号 “<>” 或 “!=” 时,效果一般;

     

     

     

    展开全文
  • 索引失效几种情况

    千次阅读 2021-03-09 16:43:59
    什么时候没用 1.有or必全有索引; 2.复合索引未用左列字段; 3.like以%开头; 4.需要类型转换;...索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 如果条件中有or,即使其中有部分条件带索引也...

     

    什么时候没用

    1.有or必全有索引;
    2.复合索引未用左列字段;
    3.like以%开头;
    4.需要类型转换;
    5.where中索引列有运算;
    6.where中索引列使用了函数;
    7.如果mysql觉得全表扫描更快时(数据少);

    什么时没必要用

    1.唯一性差;
    2.频繁更新的字段不用(更新索引消耗);
    3.where中不用的字段;
    4.索引使用<>时,效果一般;

    详述(转)

    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:

    • 如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),例子中user_id无索引

    注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

    • 对于复合索引,如果不使用前列,后续列也将无法使用,类电话簿。
    • like查询是以%开头

    • 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

    • where 子句里对索引列上有数学运算,用不上索引

    • where 子句里对有索引列使用函数,用不上索引

    • 如果mysql估计使用全表扫描要比使用索引快,则不使用索引

    比如数据量极少的表

    什么情况下不推荐使用索引?

    1) 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引

    比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。

    2) 频繁更新的字段不要使用索引

    比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。

    3) 字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引

    只有在where语句出现,mysql才会去使用索引

    4) where 子句里对索引列使用不等于(<>),使用索引效果一般

     

    https://www.cnblogs.com/liehen2046/p/11052666.html

    展开全文
  • MySQL索引的建立对于...以下就列举出几种索引失效情况: 在举例之前,先简单的介绍一下MySQL中的explain,explain这个命令可以查看SQL语句的执行计划,结果如图所示: id: SELECT 查询的标识符. 每个 SELECT ...

      MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提MySQL的检索速度。但是,有时候常常会明明建了索引,查询结果却没有使用到索引的情况。那么就说明索引失效。以下就列举出几种索引失效的情况:
      在举例之前,先简单的介绍一下MySQL中的explain,explain这个命令可以查看SQL语句的执行计划,结果如图所示:
    在这里插入图片描述

    • id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.
    • select_type: SELECT 查询的类型.
    • table: 查询的是哪个表
    • partitions: 匹配的分区
    • type: join 类型
    • possible_keys: 此次查询中可能选用的索引
    • key: 此次查询中确切使用到的索引.
    • ref: 哪个字段或常数与 key 一起被使用
    • rows: 显示此查询一共扫描了多少行. 这个是一个估计值.
    • filtered: 表示此查询条件所过滤的数据的百分比
    • extra: 额外的信息
       因此,要查看索引是否失效,只需要看possible_keys以及key属性就可以了,其他属性暂不赘述。

    索引失效的几种情况:

    本文以此表gift_exchange_record作为例子,以下是当前表的索引:
    在这里插入图片描述

    1、索引列中使用了运算或者函数

    错误情况1,使用了数学运算:
    在这里插入图片描述
    错误情况2,使用了函数运算:
    在这里插入图片描述
    正确情况:在这里插入图片描述

    2、or语句中前后字段没有同时都为索引

    错误情况:
    在这里插入图片描述

    正确情况:在这里插入图片描述

    3、数据类型出现隐式转化, 例如字符串比较没有使用单引号

    错误情况:
    在这里插入图片描述
    正确情况:
    在这里插入图片描述

    4、like语句以%开头

    错误情况:在这里插入图片描述
    正确情况:
    在这里插入图片描述

    5、索引字段中使用is null 、is not null 、!=、<>
    6、复合索引中没有遵循最佳左前缀原则

    最佳左前缀原则即要使复合索引生效,必须要先有左边的字段,再使用右边的字段时才会生效,直接使用右边的字段索引不会生效。
    在这里插入图片描述
    正确情况1:只使用左边字段在这里插入图片描述
    正确情况2:左右字段都使用在这里插入图片描述
    错误情况:只使用了右边字段
    在这里插入图片描述

    7、查询结果大于全表的30%
    展开全文
  • 使索引失效几种情况: (1)条件中有or,即使有条件带索引也不会使用;要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 (2)对于多列索引,如果不是使用的第一部分,则不会使用索引; (3)like查询...
  • 1、 没有正确使用符合索引 例如我们根据user表中的A,B,C创建一个符合索引 create index on user(A,B,C) 实际上mysql是为我们创建了三个索引 ...3、对索引列进行运算,索引失效 select A from user
  • mysql索引失效几种情况

    千次阅读 2016-03-23 00:30:47
    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:  1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or...
  • 哪些情况下会造成索引失效: 1、字符串不使用单引号 2、范围查询时,右边的列不使用索引 3、违反最左前缀原则 4、在索引列上进行运算操作 5、用or连接的字段,前面的字段建立索引,后面的没有建立索引,这是前面的...
  • 这里常规查询,分别查询了当使用复合索引中的部分字段当查询条件时的索引使用情况,通过explain执行计划结果显示,以上四种情况全部都使用到了索引,ref属性代表有个常量,还可以看出key_len在增加,代表索引检索...
  • 复合索引失效几种情况

    千次阅读 2020-02-16 11:52:53
    a、b、c建立索引 有效索引: ① a ②a,b ③a,b,c 解释:复合索引建立的存储结构,第二个是依赖于在第一个索引使用的基础上,以此类推。 2、like模糊查询,使用最左精确匹配l ike ‘name%’ ,其他方式全表扫描。 3、...
  • MySQL索引失效几种情况

    千次阅读 2016-06-20 21:14:56
     对于多列索引,查询的时候只有使用了多列索引的第一个字段,索引才会生效。 三,使用OR关键字  分析查询语句: explain select * from tb_user where phone=1370348890 or id=3  当使用or关键字进行查询时候,...
  • 1、条件中用or,即使其中有条件带索引,也不会使用索引查询 注意:要想使用or,又想索引生效,只能将or条件中的每个列都加上索引 2、对于多列索引,不是使用的第一部分,则不会使用索引 3、like查询是以%开头 4...
  • mysql索引失效几种情况(总结)

    万次阅读 2016-12-18 19:11:38
    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:  1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or条件中的每...
  • 当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效。 组合索引,不是使用第一列索引,索引失效。 数据类型出现隐式转化。如varchar不加单引号的话可能会自动转换为int型,...
  • 以下几种情况就会导致索引失效: 1. 没有 WHERE 子句 众所周知,添加索引的字段必需要在where条件后适当使用才会生效,如果连查询条件都没有,那肯定不会用到索引的。 2. 使用 IS NULL 和 IS NOT NULL select ...
  • MySQL中会使索引失效几种情况

    千次阅读 2018-10-23 15:46:04
    &amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;...索引key_test
  • Mysql索引失效几种情况

    千次阅读 2017-11-13 17:27:52
    Mysql索引会失效的几种情况1,索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因),注意:要想使用or,又想让索引...
  • 索引失效几种例子

    千次阅读 2017-08-12 23:18:43
    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or条件中的每...
  • 索引失效几种场景

    2019-03-26 21:53:22
    近期就碰到一个案例,同大家分析一个当时的解决思路以及对索引失效几种情况总结一下~ 一、告警发现     在一个风和丽日的下午,突然一条高亮的钉钉信息抖动在为眼前。【尊敬的用户xxx,...
  • 1.前导模糊查询不能利用索引(like '%XX'或者like '%XX%')  假如有这样一列code的值为'AAA','AAB','BAA','BAB' ,如果where code like '%AB'条件,由于前面是  模糊的,所以不能利用索引的顺序,必须一个个去找,...
  • Mysql索引失效几种情况分析

    千次阅读 2015-04-08 08:50:55
    在做项目的过程中,难免会遇到明明给mysql建立了索引,可是查询还是很缓慢的情况出现,下面我们来具体分析下这种情况出现的原因及解决方法: 索引并不是时时都会生效的,比如以下几种情况,将导致索引失效
  • 1.索引无法存储null值  a.单列索引无法储null值,复合索引无法储全为null的值。  b.查询时,采用is null条件时,不能利用到索引,只能全表扫描。  为什么索引列无法存储Null值?  a.索引是有序的。NULL值...
  • MySQL索引失效几种场景

    千次阅读 2018-10-27 21:32:08
    我们都知道建立索引能够提高查询效率,那么是不是任何情况下都能提高呢,当然不是的的,下面我们就来列举一些常见的索引失效的场景。 借用上一篇文章的dm_person_info表 在card_code列没加索引的时,查询时间如下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,371
精华内容 26,148
关键字:

索引失效的几种情况