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