B树和B+树都是平衡的多叉查找树,
B树所有的结点都包含key和data数据,而B+树只有叶子结点存放data数据,
mysql使用B+树
聚集索引的叶子结点存储的是数据本身,非聚簇索引的叶子结点存储的是指向数据的指针。
数据库引擎innodb使用聚簇索引,但是注意辅助索引是非聚簇索引,辅助索引的叶子结点存放的是主键的值。
数据库引擎myisam使用非聚簇索引,也就是叶子结点存放的是指向数据的指针。
由此看来,聚簇索引是这样理解的,如果完整的数据和索引在一起就是聚簇的,不在一起就是非聚簇的。
唯一索引:
普通索引允许被索引的数据列包含重复的值。唯一索引不允许,我们可以使用关键字UNIQUE来定义唯一索引。
人们创建唯一索引的目的往往是为了避免数据出现重复。
覆盖索引:
一般情况下,非主键索引需要先通过辅助索引查找到主键的值,然后再通过主索引查找到数据。
覆盖索引允许我们只通过辅助索引就可以找到想要的字段值。
前缀索引:
当要索引的列字符很多时 索引则会很大且变慢
( 可以只索引列开始的部分字符串 节约索引空间 从而提高索引效率 )
建立前缀索引 以前4位字符来创建
alter table x_test add index(x_name(4));
联合索引:
联合索引:可以覆盖多个数据列,像INDEX(columnA, columnB)索引,这就是联合索引。
联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,
但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,
但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
最左匹配原则:
我们在使用复合索引时,一个查询可以只使用索引的一部分,
但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,
但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。