如果给表定义了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,也就是「平衡树」结构,换句话说,就是整个表就变成了一个索引,这就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键, 一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。
非聚集索引和聚集索引一样, 同样是采用平衡树作为索引的数据结构。假如给user表的name字段加上索引 , 那么索引就是由name字段中的值构成,在数据改变时, DBMS需要一直维护索引结构的正确性。如果给表中多个字段加上索引 , 那么就会出现多个独立的索引结构,每个索引(非聚集索引)互相之间不存在关联。
非聚集索引和聚集索引的区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据。不管以任何方式查询表, 最终都会利用主键通过聚集索引来定位到数据, 聚集索引(主键)是通往真实数据所在的唯一路径。
但是也可以根据查询的结果建立复合索引或者多字段索引查询,为一个索引指定多个字段, 那么这个多个字段的内容都会被同步至索引之中,能加快查询的速度。另外,复合索引的属性顺序也会影响到查询的速度,具体较为优化的顺序要根据具体数据分布。
参考链接:
https://www.cnblogs.com/lykbk/p/wererereredfdf.html
https://zhuanlan.zhihu.com/p/23624390?utm_source=wechat_session&utm_medium=social