网站套用,WordPress 主题选项框架,wordpress 4.9 php7,融安有那几个网站做的比较好的文章目录 【MySQL学习笔记】关于索引1.索引数据结构2.索引存储3.联合索引3.1 联合索引的b树结构3.2 索引覆盖#xff1f;回表#xff1f;3.3 联合索引最左匹配原则3.5 索引下推 4.索引失效 【MySQL学习笔记】关于索引
1.索引数据结构
索引是一种能提高查询速度的数据结构。… 文章目录 【MySQL学习笔记】关于索引1.索引数据结构2.索引存储3.联合索引3.1 联合索引的b树结构3.2 索引覆盖回表3.3 联合索引最左匹配原则3.5 索引下推 4.索引失效 【MySQL学习笔记】关于索引
1.索引数据结构
索引是一种能提高查询速度的数据结构。
1、索引结构/索引类型
按数据结构分类B树索引、Hash索引、全文索引。
按物理存储分类聚簇索引、二级索引。
按字段特性分类主键索引、唯一索引、普通索引、前缀索引。
按字段个数分类单列索引、联合索引。
2、InnoDB的索引数据结构是什么InnoDB是支持B树和FULLTEXT索引的
我所了解的是B树索引在数据组织形式上B树的非叶子节点只存放索引和指向子节点的指针叶子节点存储索引和行数据。并且所有叶子节点都是通过指针相连形成一个双向链表支持快速的顺序访问和范围查询。树的高度平衡稳定性好。
2.索引存储
堆表和索引组织表有什么区别分别应用场景是什么 堆表是 MyISAM 使用的存储方式索引组织表是 InnoDB 使用的存储方式。
堆表的数据是无序存放的无需维护索引与数据的一致性因此插入性能较好。同时堆表的索引是非聚簇索引所有索引是平级的索引查询性能较高通常一次可以定位到结果。但堆表仅支持表锁在高并发场景下性能较差适用于低并发、以读为主的场景。
索引组织表的数据按照主键顺序存储主键索引即为数据本身并支持行锁因此在高并发场景下性能远高于堆表特别适用于频繁的增删改操作。但由于需要维护索引顺序和数据一致性其插入性能相对较低尤其是当表的主键频繁变化或数据碎片较多时。
3.联合索引
3.1 联合索引的b树结构
推荐这篇文章联合索引在B树上的存储结构及数据查找方式上一篇文章《MySQL索引那些事》主要讲了MySQL索引的底层原理且对比了B - 掘金 引用文章里面的这个图
InnoDB会使用主键索引在B树维护索引和数据文件创建的联合索引也会生成一个索引树同样都是B树的结构只不过它的data部分存储的是联合索引所在行的值。 对于这个联合索引排序规则就是根据定义索引的顺序(b,c,d)先根据b排序若b相同再根据c排序依次类推。
3.2 索引覆盖回表
创建联合索引之后进行查询时索引覆盖还是回表主要是看SELECT的列。
就还是要上面的例子进行查询。
select * from table_name where b 12 and c 14 and d 3;
这个查询的是数据全部所以需要回表为什么呢
这个还是基于联合索引的特性它会创建一个新的B树但是这个树的叶子节点只有联合索引的参数如果你查询的不是其中的列那么就会根据这个查询到的主键id回表查询。
如果你查询的列就是其中一个那么就不需要回表查询了直接返回这个数据就行这就是索引覆盖。
所以说联合索引的优势在于支持索引覆盖查询避免回表操作并且对索引列的查询可直接利用索引的有序性完成排序无需额外的外部排序显著提升查询性能。
3.3 联合索引最左匹配原则
MySQL会从联合索引最左边的索引开始匹配查询条件从左到右匹配如果查询条件没有使用到某个列那么该列右边的列全部失效。当查询条件使用了某个列但是该列的值包含范围查询范围查询的字段可以用到联合索引但是范围查询字段后面的字段无法用到联合索引。
3.5 索引下推
索引下推是MySQL5.6的优化机制默认是开启的如果条件判断字段在二级索引B树里就会下推到InnoDB存储引擎层来过滤过滤完的记录才会回表相比没有索引下推的时候可以减少回表次数。
Where a100 and b100 and c200 order by d 怎么建立联合索引
(bcda)bc走索引d利用了索引有序性避免file sorta不能走索引走索引下推。
4.索引失效
索引失效有哪些