MySQL索引原理
2018-05-19 本文已影响21人
无善无恶
数据结构:B+树
关于B-Tree有一系列有趣的性质,例如一个度为d的B-Tree,设其索引N个key,则其树高h的上限为logd((N+1)/2),检索一个key,其查找节点个数的渐进复杂度为O(logdN)。从这点可以看出,B-Tree是一个非常有效率的索引数据结构。
B+树中间节点不存储数据,只存储指针。只有叶子节点存储数据,且叶子节点之间通过指针链接,可以方便连续访问。
MyISAM引擎:非聚集索引,索引文件放在磁盘,叶节点的data域存放的是数据记录的地址。
InnoDB引擎:聚集索引,数据文件本身就是索引文件,叶节点的data域存放的保存了完整的数据记录。第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。
创建索引的三种操作:
-
CREATE INDEX
-
ALERT TABLE
-
CREATE TABLE ....[UNIQUE|FULLTEXT|SPATIAL] {INDEX|KEY} index_name [USING {BTREE | HASH}] (col_name [(length)] [ASC | DESC]...)
索引的使用场景:
-
等值匹配
-
范围匹配
-
最左前缀匹配
-
优化ORDER BY / GROUP BY等操作
索引的类型:
-
INDEX 普通索引
-
UNIQUE 唯一索引
-
PREMARY KEY 主键索引