zoukankan      html  css  js  c++  java
  • 聚集索引与非聚集索引

    聚集(clustered)索引

      数据行的的物理顺序与列值(一般主键事务那一列)的逻辑顺序相同,一个表中只能有一个聚集索引。

      一个表就像以前用的新华字典,聚集索引就像拼音目录,而每个字存放的页码就是数据的物理地址,如果查询一个字,只需查询该字对应在字典拼音目录对应的页码,就可以查询到这个字所在的位置,而拼音目录对应的A-Z的字顺序,和新华字典实际存储的字的顺序A-Z也是一样的。数据行的物理顺序与列值的顺序相同,如果查询的id比较靠后的数据,那么这行数据的地址在磁盘中的物理地址也会比较靠后。而且由于物理地址排列方式与聚集索引的顺序相同,所以就只能建立聚集索引。

     

      聚集索引的好处是索引的叶节点就是对应的数据节点,可以直接获取到对应的全部列的数据,而非聚集索引在索引没有覆盖到对应的列的时候需要进行二次查询,因此在查询方面,聚集索引的速度往往会更占优势。

    非聚集索引

    该索引中索引的逻辑顺序与磁盘上的物理存储顺序不同,一个表中可以有多个非聚集索引。

    非聚集索引就像字典中的偏旁字典,它的结构顺序与实际存放顺序不一定一致。

     

      非聚集索引的叶节点 仍然是索引节点,只是有一个指针指向对应的数据块,如果使用非聚集索引查询,而查询列中包含了其他该索引没有覆盖的列,那么还要进行第二次查询,查询节点上对应的数据行的数据。

       聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行 的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此 类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。

  • 相关阅读:
    Sql学习第二天——SQL DML与CTE解释
    Sql学习第一天——SQL UNION 和 UNION ALL 操作符(1)
    Sql学习第一天——SQL 练习题(3)
    Sql学习第一天——SQL 将变量定义为Table类型(2)
    C#性能优化实践(摘抄)
    SQL数据纵横列查询
    「SHOI2006」有色图
    SP419/422 TRANSP(2) Transposing is Fun
    ARC084F XorShift
    洛谷 P4708 画画(无标号欧拉子图计数)
  • 原文地址:https://www.cnblogs.com/windy-xmwh/p/9300351.html
Copyright © 2011-2022 走看看