您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页浅谈mysql增加索引不生效的几种情况

浅谈mysql增加索引不生效的几种情况

来源:筏尚旅游网
浅谈mysql增加索引不⽣效的⼏种情况

增加索引可以提⾼查询效率。

增加索引就是增加⼀个索引⽂件,存放的是数据的地址,类似与我们⽂档的⽬录,在查找过程中可以不⽤从书的内容查找,直接根据⽬录对应的页码查找。索引是根据地址查找。

创建索引,索引使⽤的数据结构也有很多种。常见的是B-tree,哈希等。mysql默认使⽤的数据库索引是innerDB,innerDB的索引结构是B-tree。但是在使⽤过程中哪些情况增加索引⽆法达到预期的效果呢?下⾯列举⼏种常见情况:

假设name age address 都已经加了索引。索引名字分别为 index_name,index_age,index_address。

⽤explain查看SQL的执⾏计划

执⾏计划的 type

表⽰MySQL在表中找到所需⾏的⽅式,⼜称“访问类型”,常见类型如下:

ALL, index, range, ref, eq_ref, const, system, NULL

ALL:Full Table Scan, MySQL将遍历全表以找到匹配的⾏

index:Full Index Scan,index与ALL区别为index类型只遍历索引树

range:索引范围扫描,对索引的扫描开始于某⼀点,返回匹配值域的⾏。显⽽易见的索引范围扫描是带有between或者where⼦句⾥带有<, >查询。当mysql使⽤索引去查找⼀系列值时,例如IN()和OR列表,也会显⽰range(范围扫描),当然性能上⾯是有差异的。ref:使⽤⾮唯⼀索引扫描或者唯⼀索引的前缀扫描,返回匹配某个单独值的记录⾏

eq_ref:类似ref,区别就在使⽤的索引是唯⼀索引,对于每个索引键值,表中只有⼀条记录匹配,简单来说,就是多表连接中使⽤primarykey或者 unique key作为关联条件。

1、使⽤查询多列使⽤or,type=all

2、使⽤模糊查询,type=all

3、在加索引的字段上有运算

4、如果列类型是字符串,需要使⽤引号引⽤起来。name字段是字符串类型

没引号 type=all

有引号 tye=ref

⾸先mysql有个类型转换规则就是将“字符转成数字”,上⾯的sql是包含运算的:explain SELECT name,age,address FROM user where cast(name as signed)= 10;

5、反向查询区分情况

(not , not in, not like, <>, != ,!>,!< ) 使⽤索引效果

其他情况

1、联合索引中关联字段没有使⽤相同的字符集;

2、联合索引查询时没有⽤到第⼀个索引字段,即不满⾜最左原则;3、本⾝数据量很少,mysql会判断是否需要使⽤索引;

到此这篇关于浅谈mysql增加索引不⽣效的⼏种情况的⽂章就介绍到这了,更多相关mysql增加索引不⽣效内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务