索引类型

索引类型分为主键索引和非主键索引。(一定要牢记,是怎么存储数据的)

  • 主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。
  • 非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。

聚簇索引

聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。

因为B+TREE的原因,最好使用连续的整数字段,更好确定查找访问范围

回表

根据上面的索引结构说明,主键索引和普通索引的查询区别

  • 如果语句是 select * from T where ID=500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树;
  • 如果语句是 select * from T where k=5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表

覆盖索引

如果执行的语句是 select ID from T where k between 3 and 5,这时只需要查 ID 的值,而 ID 的值已经在 k 索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 k 已经“覆盖了”我们的查询需求,我们称为覆盖索引。

索引下推

索引下推是MySQL5.6版本推出的优化手段

默认是开启的,可以通过下面命令关闭

SET optimizer_switch = 'index_condition_pushdown=off';

假如有一下SQL,不通的执行过程,如下图表示

index(name,age)
mysql> select * from tuser where name like '张%' and age=10 and ismale=1;

可以看到,无索引下推是,每次都需要回表查询,而下推的是在先过滤好结果集,回表拿select * 的数据



无索引下推



有索引下推

最新文章

  1. 如何用 .Net 开发
  2. Beta版本冲刺———第七天
  3. Highcharts入门+Highcharts基础教程,【非常值得学习的资料】
  4. lintcode 中等题:Max Points on a Line 最多有多少个点在一条直线上
  5. 八月份 CUGBACM_Summer_Tranning 题解
  6. QJsonObject和QJsonArray的巨坑
  7. wcf 上传文件报413,404和发布错误
  8. 校验Linux程序是否被黑客修改
  9. docker学习系列(一):docker 基础
  10. SpringBoot初探之Swagger配置
  11. 5分钟安装 关于win10安装composer PHP 用来管理依赖(dependency)关系的工具
  12. 在浏览器端获取文件的MD5值
  13. 《DOM Scripting》学习笔记-——第四章 案列分析 JS美术馆(点击链接到图片)
  14. 关于sql优化的一些点
  15. python Flask框架mysql数据库配置
  16. tar只解压tar包中某个文件
  17. ES6 模块
  18. 新手如何学习python(python学习路线图)
  19. Akka-Cluster(1)- Cluster Singleton 单例节点
  20. POJ 2456 Agressive cows(二分)

热门文章

  1. Ubuntu几秒钟没有任何操作自动黑屏
  2. Flutter保持页面状态AutomaticKeepAliveClientMixin
  3. 开源一个使用python和pyQT实现的产测工具
  4. Git使用ssh公钥
  5. Protocol buffers编写风格指南
  6. Java设计模式学习笔记三
  7. (转)协议森林04 地址耗尽危机 (IPv4与IPv6地址)
  8. File判断功能(新手)
  9. git常用命令学习配详细说明
  10. Mol Cell Proteomics. | Elevated Hexokinase II Expression Confers Acquired Resistance to 4-Hydroxytamoxifen in Breast Cancer Cells(升高的己糖激酶II表达使得乳腺癌细胞获得对他莫昔芬的抗性)(解读人:黄旭蕾)