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