索引类型

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

主键索引的叶子节点存的是整行数据。在 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 * 的数据

无索引下推

有索引下推

mysql版本的索引类型_【mysql】索引 回表 覆盖索引 索引下推相关推荐

  1. mysql面试 索引类型_面试题目整理(MySQL系列-索引)

    最近又开始面试了,整理一些面试的高频考点吧.有幸参与一次社招面试,看的还是底层知识: 1.数据库存储引擎分类: (1):存储引擎主要有: 1. MyISAM(不支持事务) , 2. InnoDB(支持 ...

  2. mysql 回表 覆盖索引_mysql 14 覆盖索引+回表

    举个栗子,假如有一张表:tableA t(id PK, name KEY, sex, flag);  即id是聚集索引,name是普通索引. 分别执行2条SQL SQL1 :   select id, ...

  3. MySql数据库explain用法示例_[MYSQL]-EXPLAIN用法

    EXPLAIN简介 当我们需要优化一个SQL语句的时候,我们需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描:在MySQL中我们可以通过EXPLAIN去完成,EXPLAIN命令是查看优化器如何 ...

  4. B+树索引(10)之回表的代价

    B+树索引(10)之回表的代价 前言 什么是回表 回表操作一般发生在二级索引中,查询的列不全部包含在二级索引中,需要根据二级索引叶子节点中的主键id,再去聚簇索引中查询完整的用户数据,这个查询过程称为 ...

  5. mysql 创建表格time类型_记一次关于 Mysql 中 text 类型和索引问题引起的慢查询的定位及优化...

    最近有用户反馈产品有些页面加载比较慢,刚好我在学习 Mysql 相关知识,所以先从 Mysql 慢查询日志开始定位: step1:通过慢查询日志定位具体 SQL 首先通过 SHOW VARIABLES ...

  6. mysql的索引类型_带您了解mysql索引类型

    MySQL索引的种类繁多,基本分为四类,下面就为您分别介绍MySQL索引,供您参考,希望可以让您对MySQL索引有更深的认识. MySQL索引类型包括: (1)普通索引 这是最基本的索引,它没有任何限 ...

  7. mysql的索引缺点_「缺点有哪些」数据库索引是什么 有什么优缺点 - seo实验室

    缺点有哪些 数据库索引是什么 数据库索引是:数据库索引就像是一本书的目录一样,使用它可以让你在数据库里搜索查询的速度大大提升.而我们使用索引的目的就是,加快表中的查找和排序.索引的几种类型分别是普通索 ...

  8. mysql 人名用什么类型_如何选择合适的MySQL数据类型

    一.MySQL数据类型选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更少的CP ...

  9. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...

    这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...

最新文章

  1. 使用Python读写kafka
  2. 1086 就不告诉你
  3. JavaScript面向对象——封装及相关原理解析
  4. Gartner:PaaS 和平台架构领域的 4 大趋势 | 技术头条
  5. Java文档阅读笔记-Spring Boot JDBC
  6. CSDN博客如何转载
  7. LeetCode 103. Binary Tree Zigzag Level Order Traversal
  8. 最全 MyBatis 核心配置文件总结,速度收藏了~
  9. Tomcat 修改端口号
  10. HttpClient4.x 文件上传
  11. 揭阳市计算机考证报名点在哪里
  12. 高中数学如何考120以上高中数学如何快速提高
  13. SpringBoot接入支付宝沙箱返回支付二维码
  14. ERROR 1197 (HY000)问题原因及解决方法
  15. df.pivot函数用法
  16. python股票分析论文_股票分析与资产组合(python)
  17. JULIA学习材料合集
  18. dataframe python,使用pandas dataframe python创建实时更新图
  19. 选定进行压缩的卷可能已损坏,请使用Chkdsk修复
  20. leetcode 剑指offer-46.把数字翻译成字符串

热门文章

  1. ASP.NET AJAX(开发代号:Atlas)的相关问题请在本帖中提出
  2. 年度回顾:2018年的AI/ML惊喜及预测19年的走势(一)...
  3. 当 position:sticky 遇到 bootstrap 浮动布局时候的踩坑记录
  4. AngularJS快速入门指南04:指令
  5. [测试]单元测试框架NUnit
  6. spring data mongo比较两个字段查询
  7. 如何寻找高质量流量日入三百+
  8. gpu programming guide for g80(dx9)
  9. ​redis实现消息队列
  10. Qt+OpenCV界面