汇集索引与非汇集索引

汇集(clustered)索引,也叫聚簇索引。性能

  • 定义:数据行的物理顺序与列值(通常是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个汇集索引。
  • 注:第一列的地址表示该行数据在磁盘中的物理地址,
    • 后面三列才是咱们SQL里面用的表里的列,其中id是主键,创建了汇集索引

建立汇集索引

  • 若是不建立索引,系统会自动建立一个隐含列做为表的汇集索引。
    • 注意:SQL Sever默认主键为汇集索引,也能够指定为非汇集索引,
    • 而MySQL里主键就是汇集索引

非汇集索引

  • 定义:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不一样,
    • 一个表中能够拥有多个非汇集索引
  • 除了汇集索引之外的索引都是非汇集索引
    • 只是人们想细分一下非汇集索引,分红普通索引惟一索引全文索引
  • 非汇集索引就像新华字典的偏旁字典,他结构顺序与实际存放顺序不必定一致
  • 非汇集索引的二次查询问题

    • 非汇集索引叶节点仍然是索引节点
      • 只是有一个指针指向对应的数据块,此若是使用非汇集索引查询,
    • 而查询列中包含了其余该索引没有覆盖的列,
      • 那么他还要进行第二次的查询,查询节点上对应的数据行的数据。(回表)
    • 若是在数据量不大的状况下,
      • SQL Server颇有可能不会使用非汇集索引进行查询,
      • 而是使用汇集索引进行查询,即使须要扫描整个汇集索引,效率也比使用非汇集索引效率要高

如何解决非汇集索引的二次查询问题

  • 复合索引(覆盖索引)

总结与使用心得

  • 使用汇集索引的查询效率要比非汇集索引的效率要高,
    • 可是若是须要频繁去改变汇集索引的值,
      • 写入性能并不高,由于须要移动对应数据的物理位置。
  • 非汇集索引在查询的时候能够的话就避免二次查询,这样性能会大幅提高。
  • 不是全部的表都适合创建索引,
    • 只有数据量大表才适合创建索引,且创建在选择性高的列上面性能会更好。
相关文章
相关标签/搜索