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

增加索引就是增加一个索引文件,存放的是数据的地址,类似与我们文档的目录,在查找过程中可以不用从书的内容查找,直接根据目录对应的页码查找。索引是根据地址查找。
创建索引,索引使用的数据结构也有很多种。常见的是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,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 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会判断是否需要使用索引;

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Android(安卓)后台线程调用前台线程的几种方法
  3. 我今天的面试题,注册广播有几种方式,这些方式有何优缺点?请谈谈Andr
  4. Android(安卓)代码设置Color的几种方式
  5. JS判断终端类型的几种方法
  6. 查看基于Android(安卓)系统单个进程内存、CPU使用情况的几种方法
  7. 浅谈RelativeLayout相对布局
  8. Android中的几种网络请求方式详解
  9. Android实现页面跳转的几种方式(转贴)

随机推荐

  1. 为什么说Android令人沮丧!?
  2. Android 渗透测试学习手册 第七章 不太知
  3. Android彻底退出应用程序(转)
  4. 有关Android手机软件详细分析
  5. 基于Android 平台简易即时通讯的研究与设
  6. Android系列教程(3):Android SDK中常用命令
  7. Android面试题集(2019-04-04总结)
  8. Android 系统及framework 概述
  9. A folder failed to be renamed or moved
  10. 浅析Android手机卫士接收短信指令执行相