聚集索引和非聚集索引

SQL Sever索引类型有:唯一索引,主键索引,聚集索引,非聚集索引。

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

创建聚集索引,系统会自动创建一个隐含列作为表的聚集索引

添加聚集索引  create clustered index clustered_index on table_name(colum_name)

非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引,除聚集索引外,都是非聚集索引,非聚集索引的结构顺序与实际存放的顺序不一定一致。

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

在sql server 里面会对查询自动优化,选择适合的索引,数据量不大的情况下,sql server 很有可能不会使用非聚集索引进行查询,而使用聚集索引查询,即便需要扫描整个聚集索引,效率也比使用非聚集索引效率要高。

解决非聚集索引二次查询的问题:复合索引

四.总结与使用心得

  1. 使用聚集索引的查询效率要比非聚集索引的效率要高,但是如果需要频繁去改变聚集索引的值,写入性能并不高,因为需要移动对应数据的物理位置。
  2. 非聚集索引在查询的时候可以的话就避免二次查询,这样性能会大幅提升。
  3. 不是所有的表都适合建立索引,只有数据量大表才适合建立索引,且建立在选择性高的列上面性能会更好。

 

posted @ 2018-06-29 17:33  wonderfulviews  阅读(175)  评论(0编辑  收藏  举报