今天回顾了下mysql语句执行过程,随笔记录下。先来看看mysql的常见书写结构, #方式1: SELECT ...,....,... FROM ...,...,.... WHERE 多表的连接条件 AND 不包含组函数的过滤条件 GROUP BY ...,... HAVING 包含组函数的过滤条件
一、索引概述 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。这些数据结构以某种方式指向数据, 这样就可以在这些数据结构的基础上实高级查找算法。 好比一本教课书的目录
首先需要强调,索引是基于具体的存储引擎实现的,我们谈索引必然绕不开基于哪个存储引擎。 一、索引推演 先来看个最简单的查找语句 SELECT [列名列表] FROM 表名 WHERE 列名 = xxx; 展示出的所有数据在底层的存储单位为数据页。一个数据页中默认的存储大小是16KB,也就是只能存储部分
一、索引迭代 上文提到目录项可以使用二分法的方式快速定位到目标目录项,进而找到数据页位置。 实际操作中,数据页只有16KB大小,随着数据页越来越多,数据目录项也会越来越多,底层连续空间存储的压力就会越来越大。还有一种情况,如果某数据页后期删除不要了,或者有数据新增,意味着数据目录项也需要删除或新增,
一、聚簇索引与非聚簇索引 索引按照物理实现方式,索引可以分为2种:聚(聚集)和非聚簇(非聚集)索引。我们也把非聚集索引称为二级索引或者辅助索引。 聚簇索引:基于主键构建的索引或者b+tree。聚簇索引并不是一种单独的索引类型,而是一种数据存储方式(所有的用户记录都存储在了叶子节点),也就是所谓的 索
前文 https://hamburgers.cn/archives/index_04 介绍的 聚簇索引只能在搜索条件是 主键值 时才能发挥作用,因为B+树中的数据都是按照主键进行排序的。那如果我们想以别的列作为搜索条件该怎么办呢?肯定不能是从头到尾沿着链表依次遍历记录一遍。 答案:我们可以 多建几棵
一、InnoDB中b+树注意事项 1. 根页面位置万年不动 前文为了理解方便,写为先有数据页,目录项,再上层目录项,演变时候是由下而上。但是其实存储的时候实际上是由上而下。过程如下, 每当为某个表创建一个B+树索引(聚簇索引不是人为创建