在MYSQL中索引是在存储引擎实现的,所以各个存储引擎中的索引的实现方式是不一样的。本章节主要是学习INNODB存储引擎中最常用的索引类型:聚簇索引和B-Tree索引
在INNODB存储引擎中表其实是oracle中类似的聚簇表而不是普通的堆表。INNODB根据主健的顺序存储数据,数据直接存储在主健的叶子节点上面。数据即索引,索引即数据。因此为了让数据尽可能的按照主健的顺序存储在一起innodb还专门设计了一个Insert buffer机制来保证(但不能百分之百的保证)。如果数据根据主健值随机插入则会导致大量的拆页操作,不仅会影响插入的效率同样会影响其他查询操作增加随机I/O读。
当然聚簇索引按照key的顺序插入数据在某些高并发的情况下也会导致一些其他的问题。比如间隙索和自增锁(如果使用了自增列的话)
上面提到的主健,如果不指定会怎么样呢? innodb会默认使用第一个唯一索引作为key,如果都不存在则会虚拟出一个key来实现。
除了主健索引其他的都称之为"二级索引",为什么成之为二级索引呢?
因为在其他普通的索引(B-Tree索引)中存储的并不是存储的记录的物理地址而是行号(主健值),根据主健值然后在去到聚簇索引中去找到该行的位置,找到了行的位置也即找到了数据。还是因为聚簇索引的"数据即索引,索引即数据"。因此不难理解按照主健插入数据有多么重要了吧。
时间: 2024-10-25 12:34:46