- 索引:关系数据库中对某一列或多个列的值进行预排序的数据结构
- 唯一索引:在设计关系数据表的时候,看上去唯一的列,例如身份证号、邮箱地址等,因为他们具有业务含义,因此不宜作为主键。 但是,这些列根据业务要求,又具有唯一性约束:即不能出现两条记录存储了同一个身份证号。这个时候,就可以给该列添加一个唯一索引。
- 索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。反过来,如果记录的列存在大量相同的值,对该列创建索引就没有意义。
- 如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,整个表就变成了一个索引。也就是所谓的「聚集索引」。
- 只有当表包含聚集索引时,表中的数据行才按排序顺序存储。 如果表具有聚集索引,则该表称为聚集表。 如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
- 索引能让数据库查询数据的速度上升, 而使写入数据的速度下降。因为在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。
- 通过聚集索引(主键)可以查到需要查找的数据, 而通过非聚集索引(常规索引)可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据。不管以任何方式查询表, 最终都会利用主键通过聚集索引来定位到数据, 聚集索引(主键)是通往真实数据所在的唯一路径。
- 覆盖索引:搜索条件列与结果列在同一个索引中,无需再查找真实数据。
参考:
- 廖雪峰 链接:索引 - 廖雪峰的官方网站
- 知乎-陈大侠 链接:深入浅出数据库索引原理 - 知乎