1、聚簇索引和非聚簇索引区别?
聚簇索引:数据按索引顺序存储,数据行的物理顺序与列值得顺序相同。
非聚簇索引:存储指向真正数据行对的指针。
2、说一说你对mysql索引的理解?
索引是主要用来加快数据的访问,提高数据查询的效率。它的效率高主要是来源于它存储的数据结构是B+树。
Hash:它的数据结构是数组 + 链表,优势是查询速度很快。缺点是需要设计出一个优良的hash算法用来解决hash冲突问题,它只能存储Key,查询之后需要回表查询,存储是无序的,排序效率低。
二叉树:树节点分为左右两个分支,树的深度会随着数据量的增大而增大,非平衡树还有可能退化成链表,平衡树最终避免不了树的深度问题。深度越高查询IO的次数就会越多。所以二叉树是不合适的
B-树:磁盘块中除了存储了主键,还存储了当前主键对应的数据。如果一行的数据量较大,那一页16kb的存储能够存储的数据量较小。当数据量很大的时候(比如1000万),此时树的高度很高,读取磁盘IO的次数也会变得很多。
B+树:B+树的特点是非叶子节点不存储数据,存储主键和指针,数据都存在叶子节点。
B+树的高度为3,指针等信息为32B,第一层有512个指针和第二层有512个指针,约26万个指针。第三层指针加数据为1KB,总共存储数据26万*16 约400万数据。
叶子节点的数据结构还是一个双向链表,当进行区间查询的时候,这样又能够提高查询的效率。