MySQL中有哪些情况下数据库索引会失效详析


前言要想分析MySQL查询语句中的相关信息,如是全表查询还是部分查询,就要用到explain.索引的优点索引的缺点一、explain用法:expl开发云主机域名ain +查询语句。id:查询语句的序列号,上面图片中只有一个select 语句,所以只会显示一个序列号。如果有嵌套查询,如下select_type:表示查询类型,有以下几种  simple:简单的 select (没有使用 union或子查询)  primary:最外层的 select。  union:第二层,在select 之后使用了 union。  dependent union:union 语句中的第二个select,依赖于外部子查询  subquery:子查询中的第一个 select  dependent subquery:子查询中的第一个 subquery依赖于外部的子查询  derived:派生表 select(from子句中的子查询)table:查询的表、结果集type:全称为”join type”,意为连接类型。通俗的讲就是mysql查找引擎找到满足SQL条件的数据的方式。其值为:  性能从上到下依次降低。possible_keys:可能用到的索引key:使用的索引ref:ref列显示使用哪个列或常数与key一起从表中选择行。rows:显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。Extra:额外的信息二、数据库不使用索引的情况下面举的例子中,GudiNo、StoreId列都有单独的索引。2.1、like查询已 ‘%…’开头,以’xxx%’结尾会继续使用索引。下图中第一句使用的%,没有使用索引,从rows为224147,使用索引rows为1。    2.2 where语句中使用 和 !=2.3 where语句中使用 or,但是没有把or中所有字段加上索引。这种情况,如果需要使用索引需要将or中所有的字段都加上索引。2.4 where语句中对字段表达式操作2.5 where语句中使用Not In
看了别人写的文章,有说“应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描”,实测没有全表扫描。”对于多列索引,不是使用的第一部分,则不会使用索引”,实测即使多索引,没有使用第一部分,也会命中索引,没有全表扫描。总结以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对开发云的支持。

相关推荐: Mysql索引的使用-组合索引+跳跃条件

关于MYSQL组合索引的使用,官方对下面的例子的说法是可以使用索引:KEY(key_part1,key_part2,key_part3)select …. from table where key_part1=’xxx’ and key_part3=’yy…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/10 20:40
下一篇 06/10 20:40

相关推荐