聚集索引和非聚集索引
SQL Sever索引类型有:唯一索引,主键索引,聚集索引,非聚集索引。
聚集索引:数据行的物理顺序与列值(一般时主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。
创建聚集索引,系统会自动创建一个隐含列作为表的聚集索引
添加聚集索引 create clustered index clustered_index on table_name(colum_name)
非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引,除聚集索引外,都是非聚集索引,非聚集索引的结构顺序与实际存放的顺序不一定一致。
非聚集索引叶节点仍然是索引节点,只是有一个指针指向对应的数据块,此如果使用非聚集索引查询,而查询列中包含了其他该索引没有覆盖的列,那么他还要进行第二次的查询,查询节点上对应的数据行的数据。
在sql server 里面会对查询自动优化,选择适合的索引,数据量不大的情况下,sql server 很有可能不会使用非聚集索引进行查询,而使用聚集索引查询,即便需要扫描整个聚集索引,效率也比使用非聚集索引效率要高。
解决非聚集索引二次查询的问题:复合索引
四.总结与使用心得
- 使用聚集索引的查询效率要比非聚集索引的效率要高,但是如果需要频繁去改变聚集索引的值,写入性能并不高,因为需要移动对应数据的物理位置。
- 非聚集索引在查询的时候可以的话就避免二次查询,这样性能会大幅提升。
- 不是所有的表都适合建立索引,只有数据量大表才适合建立索引,且建立在选择性高的列上面性能会更好。
111111