聊聊面试必问的索引
聊聊面试必问的索引
索引是面试中经常会问到的指点,索引到底是什么呢?
索引
索引其实就是让无序的数据变得有序,具体来讲就是先把创建了索引的数据库的列的内容进行排序,然后生成倒排的表,这个倒排表中保存着对应数据的链接地址,这样查询的时候,我们先从这个倒排表中查询,然后再根据倒排表的内容找到对应的具体数据。
聚簇索引与非聚簇索引
对于mysql的聚簇索引和非聚簇索引,他们都是使用B+树来进行存储的,聚簇索引是按一定的顺序将索引和数据都放在了一起,而非聚簇索引是索引和数据不是在一起存储的,我们先根据索引找到数据行的位置,然后再找到具体的数据,因此非聚集索引需要二次查询,效率不高。另外,聚集索引适合范围查找,因为聚集索引的数据都是有序排列的,而非聚集索引不适合范围查找。
索引的修改
使用索引在插入或更新主键的时候,索引就会被修改,这就可能会产生碎片,如果使用UUID作为主键的话,数据存储就变得稀疏,这可能导致全表扫描,索引主键不建议使用UUID
InnoDb中主键作为聚簇索引,如果没有设置主键就用唯一键,如果没有唯一键就使用数据库内部的行隐藏id来当主键,辅助索引的叶子节点存储的是主键值,MyIsam是非聚集索引,当涉及到全表扫描等操作的时候,MyIsam比较适合,因为占用空间小。
哈希索引与B+树索引
Mysql的索引有哈希索引,B+树索引等,哈希索引的底层是使用哈希表来实现的,当我们进行单条数据查询的时候适合哈希索引,而范围查找的时候,哈希索引在存储的时候原先有序的哈希键经过哈希运算后就可能不连续了,这时候就不合适用哈希索引了,哈希索引也不能利用索引排序和模糊查询,当然最左匹配也是不适合的,大多数情况下我们都采用B+数索引
对应索引的设计原则,我们遵循如何让加入索引之后查询更快,占用空间更小的角度出发
总结
这篇文章主要介绍了一下索引的相关知识,涉及聚簇索引,非聚簇索引,InnoDb存储引擎和MyIsam存储引擎,哈希索引和B+数索引等知识点,这能让我们更好的理解Mysql,利用好Mysql
- 点赞
- 收藏
- 关注作者
评论(0)