常见的索引类型

  • PROMARY KEY 主键索引,也是唯一索引,不允许重复数据。
  • UNIQUE INDEX唯一索引,不允许有重复数据。
  • INDEX 普通索引允许有重复数据。
  • 组合索引,对多个字段添加索引,上面几种都可设置为组合索引,组合索引需要满足最左前缀匹配原则。

这里有个有争议的地方,若有组合索引(a,b),SQL查询的时候单独使用b列,使用Explain对SQL进行解释,会发现extra字段显示 using index,和我们常说的单独查询b不走索引不一样,

实践上是因为组合索引的排列类似SQL中对2个字段进行 order by a,b 是在a有序的基础上对b进行排序,所以满足最左前缀的前提下才能对b进行高效查找,若单独使用b,会出现using index,但是因为此时b无序,无法高效查找,没有用上聚合索引。

在索引优化中还涉及到一个常见的知识点 : 回表

因为非主键索引是存储了索引字段你的数据和主键值,主键索引存储了整行的数据。若查询的数据中包含非该索引对应的字段,就会根据索引中存储的主键再去查一次数据,这个过程称为回表。

若有 t(a[PROMARY KEY],b,c,d) 此时我们增加索引 CREATE INDEX b_c ON t(b,c)

执行查询操作 SELECT b,c,d FROM t where b = xxx 因为组合索引中只有b c 字段和主键的值,所以需要回表【根据主键的值再去查一次表获得d】。

执行查询操作 SELECT b,c,a FROM t where b = xxx 因为组合索引中只有b c 字段和主键的值,一次即可获取所需要的全部值,避免了回表操作。

  • 所以我们在查询过程中可以尽量避免回表来提升SQL性能

下面是常用的索引操作的整理

  • 增加索引: CREATE INDEX b_c ON table_name(b,c) 或者 ALTER TABLE table_name ADD 索引类型 (unique,primary key,index)[索引名](字段名)

  • 删除索引:DROP INDEX index_name on table_name 或者ALTER TABLE table_name DROP INDEX index_name 或者 ALTER TABLE table_name DROP PROMARY KEY

  • 查看索引:SHOW INDEX FROM table_name

  • 分析索引:在SQL前加入关键字 explain

最新文章

  1. html中返回上一页的各种写法【转】
  2. 一个链接引发的血案---------服务器 IO及网络流量暴涨解决历程
  3. Android开发自学笔记(Android Studio1.3.1)—1.环境搭建
  4. MoleHill Getting Started AGAL(转)
  5. c++回调
  6. 关于InputStream 和String对象之间的相互转换
  7. python部落刷题宝学到的内置函数
  8. Android 四种启动模式 已看晕
  9. JavaEE(19) - Web层和EJB的整合(Session Bean)
  10. 虚拟机 centos 7 nginx安装
  11. Wireshark网络抓包(三)——网络协议
  12. Spark SQL中的几种join
  13. springMVC(6)---处理模型数据
  14. 多态原理探究-从C++编译器角度理解多态的实现原理
  15. thymeleaf(一)
  16. git 本地仓库与远程仓库建立连接
  17. intelliJ idea快捷方式
  18. frist Django app — 一、 创建工程(转载)
  19. UNITY地图寻路及服务器解决方案
  20. cas 服务端、客服端详细配置

热门文章

  1. Mapreduce学习(一)
  2. ssh连接:Socket error Event: 32 Error: 10053.
  3. 多线程系列(二)之Thread类
  4. Python 控制台输出时刷新当前行内容而不是输出新行
  5. umount 时目标忙解决办法
  6. 存储池与存储卷,使用virt-install创建虚拟机
  7. 精讲响应式WebClient第5篇-请求超时设置与异常处理
  8. 方差分析、T检验、卡方分析如何区分?
  9. openCV - 5~7 图像混合、调整图像亮度与对比度、绘制形状与文字
  10. 不要盲目使用新技术,说的就是你,JWT!