MySQL查询不使用索引汇总

众所周知,增加索引是提高查询速度的有效途径,但是很多时候,即使增加了索引,查询仍然不使用索引,这种情况严重影响性能,这里就简单总结几条MySQL不使用索引的情况

如果MySQL估计使用索引比全表扫描更慢,则不使用索引。例如,如果列key均匀分布在1和100之间,下面的查询使用索引就不是很好:select * from table_name where key>1 and key<90;

如果使用MEMORY/HEAP表,并且where条件中不使用“=”进行索引列,那么不会用到索引,head表只有在“=”的条件下才会使用索引

用or分隔开的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么涉及到的索引都不会被用到,例如:select * from table_name where key1='a' or key2='b';如果在key1上有索引而在key2上没有索引,则该查询也不会走索引

复合索引,如果索引列不是复合索引的第一部分,则不使用索引(即不符合最左前缀),例如,复合索引为(key1,key2),则查询select * from table_name where key2='b';将不会使用索引

如果like是以‘%'开始的,则该列上的索引不会被使用。例如select * from table_name where key1 like '%a';该查询即使key1上存在索引,也不会被使用

如果列为字符串,则where条件中必须将字符常量值加引号,否则即使该列上存在索引,也不会被使用。例如,select * from table_name where key1=1;如果key1列保存的是字符串,即使key1上有索引,也不会被使用。

从上面可以看出,即使我们建立了索引,也不一定会被使用,那么我们如何知道我们索引的使用情况呢??在MySQL中,有Handler_read_key和Handler_read_rnd_key两个变量,如果Handler_read_key值很高而Handler_read_rnd_key的值很低,则表明索引经常不被使用,应该重新考虑建立索引。可以通过:show status like 'Handler_read%'来查看着连个参数的值。

关于如何正确创建Mysql的索引,请参考怎样正确创建MySQL索引的方法详解;众所周知,数据表索引可以提高数据的检索效率,也可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本;但索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:

1.如果条件中有or,即使其中有条件带索引也不会使用索引(这也是为什么SQL语句中尽量少用or的原因)

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

2.对于多列索引,不是使用的第一部分,则不会使用索引。

3.like查询是以%开头时不会使用索引。

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

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

此外,查看索引的使用情况

show status like 'Handler_read%';

大家可以注意:

handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。

handler_read_rnd_next:这个值越高,说明查询越低效。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

sql语句分析是否走索引_Mysql中SQL语句不使用索引的情况相关推荐

  1. mysql explain 索引_MySql中Explain详解与索引最佳实践

    使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的.分析你的查询语句或是结构的性能瓶颈 下面是使用 explain 的例子: 在 select 语句之 ...

  2. sql语句分析是否走索引_mysql sql语句执行时是否使用索引检查方法

    在日常开发中,使用到的数据表经常都会有索引,这些索引可能是开发人员/DBA建表时创建的,也可能是在使用过程中新增的.合理的使用索引,可以加快数据库查询速度.然而,在实际开发工作中,会出现有些sql语句 ...

  3. sql语句分析是否走索引_SQL语句无法走索引的一些情况分析及语句改写思路

    因为优化器还不够强大,还有很多限制,或者因为一些逻辑原因,分析认为SQL要走索引比较好,但是事实却无法正确利用索引.这时候,除了给ORACLE需要的统计信息之外,写的SQL必须要能够给优化器足够多的额 ...

  4. sql语句分析是否走索引_SQL Server 索引使用分析(2)- 改善SQL语句,防止索引失效...

    原文出处 改善SQL语句 很多人不知道SQL语句在sql server中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select * from table1 whe ...

  5. mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

  6. mysql is null走索引_mysql中IS NULL、IS NOT NULL不能走索引?

    不知道是啥原因也不知道啥时候, 江湖上流传着这么一个说法 mysql查询条件包含IS NULL.IS NOT NULL.!=.like %* .like %*%,不能使用索引查询,只能使用全表扫描. ...

  7. mysql sql先后执行_MySQL中SQL语句执行顺序

    (7) SELECT (8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) ...

  8. mysql特殊字符小于 大于_MySQL 中SQL语句特殊字符如何处理(大于号, 小于号等)

    前言: 我们在使用mybatis时SQL是写在xml映射文件中,如果写的sql中有一些特殊字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,因为转义之后可能会出现一些问题比如SQL语句无 ...

  9. mysql优化sql语句_mysql中sql语句的优化

    1.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描 select id from t where num=10 or num=20 可以这样查询: s ...

  10. mysql not null 索引_MySQL中 IS NULL、IS NOT NULL、!= 能用上索引吗?

    看面试题的时候,总能看到MySQL在什么情况下用不上索引,如下: MySQL的WHERE子句中包含 IS NULL.IS NOT NULL.!= 这些条件时便不能使用索引查询,只能使用全表扫描. 不耽 ...

最新文章

  1. 第九章 Shell信号发送与捕捉
  2. zend studio 远程调试 php
  3. 农林行业的系统应用 php专业,农林|类专业
  4. 客户端如何通过咏南中间件调用存储过程和数据分页查询和文件传输的演示
  5. SVN更新的时候报断言失败解决办法
  6. MySQL Innodb存储引擎使用B+树做索引的优点
  7. 迁移性好、多用途,港中文提出特征分离的无监督人类三维姿态表征
  8. JS的三大组成(ES,DOM,BOM)
  9. PPT扩展展示时,PPT展示界面背景色有时候突然变成黑底?如何解决?
  10. 两个rsa密文相乘还能解密吗_RSA加密算法 | BitOL|比特在线-关注区块链技术动态的区块链导航...
  11. 怎么用python学习网站开发_2018年最好用的5个python网站开发框架
  12. Raspberry Pi使用教程
  13. Lens shading
  14. [转]oracle EBS 基础100问
  15. Python数据类型及操作
  16. 同步通讯和异步通讯的区别
  17. java将字符串放置到剪切板
  18. 数据压缩作业二:PNG图像格式分析
  19. 外汇天眼:了解外汇市场交易中的流动性
  20. 微信公众号申请页面获取验证码BUG

热门文章

  1. 【优化覆盖】基于matlab改进的鲸鱼算法求解无线传感器WSN覆盖优化问题【含Matlab源码 XYQMDXP001期】
  2. 毕设题目:Matlab三维装箱
  3. 毕设题目:Matlab图像配准
  4. 毕设题目:Matlab验证码识别
  5. 【TSP】基于matlab遗传算法求解旅行商问题【含Matlab源码 1337期】
  6. android ndk 混淆,OLLVM + NDK 混淆编译环境搭建
  7. Mac下Eclipse SVN 更换账号
  8. numpy.loadtxt() 用法
  9. c++修复工具_别再花钱修复旧照片啦!老照片一键修复工具,独创方法支持PS2020...
  10. lte基站可以做ntp server吗?_你手机信号强吗?学会这几招快速提升你的手机信号...