-
MySQL存储数据的基本单元是名为page的数据结构,缺省状态每个page允许16kb的空间
- MySQL使用page作为存储数据的基本单元,每个page默认大小为16KB。
-
page就是一个增强的HashMap
- 每个page内部使用类似HashMap的结构来存储数据,其中key是主键,value是对应的数据行。此外,page还包含指向前一个和后一个page的指针,以及记录当前page从哪个主键开始。
-
B+树的形成
- 随着数据量的增加,page数量也会增加。为了快速查找数据,MySQL使用B+树结构来管理这些page。B+树的每一层都是一个page,用于管理下一层的page,从而实现快速查找。
-
Page的前后指针
- Page的前后指针用于快速遍历数据,特别是在查询范围数据时,可以直接通过指针跳转,而无需遍历整个B+树。
-
自增主键的优势
- 自增主键使得B+树的构建更加简单,因为数据可以按顺序插入,无需进行页内数据的重新排列。
-
联合索引
- 联合索引是基于多个字段创建的索引。查询时,如果跳过了联合索引的第一个字段,索引将失效,因为无法通过第一个字段(key)快速定位数据。
-
VARCHAR字段的索引失效
- 对于VARCHAR字段,如果使用LIKE操作符进行模糊查询(如
%bc%
),索引可能会失效,因为这种查询方式无法利用索引的有序性。
- 对于VARCHAR字段,如果使用LIKE操作符进行模糊查询(如
-
回表操作
- 当通过非主键索引查询数据时,需要先找到主键,然后通过主键索引找到实际的数据行,这个过程称为回表。
-
覆盖索引
- 如果查询的所有字段都在索引中,可以直接从索引中获取数据,而无需回表,这种索引称为覆盖索引,查询速度更快。
-
聚簇索引和非聚簇索引
- 聚簇索引是将数据行存储在索引的叶子节点中,而非聚簇索引则将索引和数据分开存储。
-
MySQL不适合全文索引而ES可以
- MySQL的B+树索引不适合全文检索,因为全文检索需要从左到右的顺序匹配。而Elasticsearch通过倒排索引实现全文检索,更适合这种场景。