`
michael8335
  • 浏览: 184207 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL查询不使用索引汇总

阅读更多

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

  1. 如果MySQL估计使用索引比全表扫描更慢,则不使用索引。例如,如果列key均匀分布在1和100之间,下面的查询使用索引就不是很好:select * from table_name where key>1 and key<90;
  2. 如果使用MEMORY/HEAP表,并且where条件中不使用“=”进行索引列,那么不会用到索引,head表只有在“=”的条件下才会使用索引
  3. 用or分隔开的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么涉及到的索引都不会被用到,例如:select * from table_name where key1='a' or key2='b';如果在key1上有索引而在key2上没有索引,则该查询也不会走索引
  4. 复合索引,如果索引列不是复合索引的第一部分,则不使用索引(即不符合最左前缀),例如,复合索引为(key1,key2),则查询select * from table_name where key2='b';将不会使用索引
  5. 如果like是以‘%’开始的,则该列上的索引不会被使用。例如select * from table_name where key1 like '%a';该查询即使key1上存在索引,也不会被使用
  6. 如果列为字符串,则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%'来查看着连个参数的值。

0
0
分享到:
评论

相关推荐

    Mysql中SQL语句不使用索引的情况

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

    MySQL索引类型大汇总

    MySQL索引类型大汇总 mysql里需要用到了

    MySQL索引不会被用到的情况汇总

    MySQL中索引的类型 一般可分为四类: 普通索引:最普通的索引 唯一索引:索引列的值必须唯一,但允许有空值 主键索引:一种特殊的唯一索引,不允许有空值 联合索引:索引列有多个字段,使用时需要满足最左前缀...

    Mysql索引汇总[参考].pdf

    Mysql索引汇总[参考].pdf

    MySQL索引类型大汇总.pdf

    MySQL索引类型大汇总.pdf

    高性能MySQL(第3版).part2

    7.10.3MySQL5.1中全文索引的变化303 7.10.4全文索引的限制和替代方案304 7.10.5全文索引的配置和优化306 7.11分布式(XA)事务307 7.11.1内部XA事务307 7.11.2外部XA事务308 7.12查询缓存309 7.12.1MySQL如何...

    Mysql5.7及8.0版本索引失效情况汇总

    没有特殊说明,测试环境均为MySQL8.0,早期版本可能会有更多情况导致索引失效。8.0失效的情况,早期版本也失效;8.0不失效的情况,早期版本可能失效。 所有测试默认不考虑表为空的情况,特殊情况文中会有说明。 本文...

    MySQL索引类型大汇总[文].pdf

    MySQL索引类型大汇总[文].pdf

    Mysql索引常见问题汇总

    缺点是只能从索引的最左列开始查找,也不能跳过索引中的列,如果查询中有某个列用到了范围查询,则右边所有列都无法使用索引优化查找。 2.哈希索引:基于哈希表实现。在MySQL中,只有Memory引擎显式的支持哈希搜索。...

    MySQL 索引知识汇总

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。 拿汉语...

    mysql创建表、修改表、加索引语句汇总

    mysql创建表、修改表、加索引语句汇总

    MySQL2023年高级面试题,中级面试题,大汇总.txt

    2,为什么索引结构默认使用B+Tree,而不是Hash,二叉树,红黑树? 3、MySQL里记录货币用什么字段类型好 4、数据库自增主键可能遇到什么问题。 5、从锁的类别角度讲,MySQL都有哪些锁呢? 6、索引失效情况? 7、优化...

    mysql 索引的基础操作汇总(四)

    1.为什么使用索引:   数据库对象中的索引其实和书的目录类似,主要是为了提高从表中检索数据的速度。由于数据存储在数据库表中,所以索引是创建在数据库表对象上,由表中的一个字段或者多个字段生成的键组成,...

    mysql对于模糊查询like的一些汇总

    通过explain执行计划,我们发现,使用like模糊查询时,如果不以%和_开头查询的话,索引还是有效的 以%或者_开头查询,索引失效 (2)使用覆盖索引 当查询的的条件和查询的结果都是索引中的字段的时候,这个索引...

    MYSQL数据库入门实战课程-重点笔记

    如何学习数据库(新⼿必看)?...MySQL函数⼤全,MySQL常⽤函数汇总 MySQL约束、函数和运算符 MySQL数据类型和存储引擎数据库设计 SQL是什么?它能做什么? 电商平台(B2B2C)项⽬实战数据库设计 mysql 常⽤sql 语句

    MySQL索引失效的几种情况汇总

    更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引上根本 没Null值,不能利用到索引,只能全表扫描。 为什么索引列不能存Null值? 将索引列...

Global site tag (gtag.js) - Google Analytics