我正在使用SQL Server 2012数据库,并想获得有关查询优化的知识。这样做我遇到了一个疑问,如果有人可以帮助我,我将不胜感激。
Sales.OrderDetails
有两个索引:一个群集在Orderid
上,一个非群集在Order id.
上
第一个问题:当orderid
上有聚簇索引时,我们真的需要非聚簇索引吗?
要解决我运行此查询的问题:
select orderid
from Sales.OrderDetails
where orderid = 10248
两次;一个启用非聚集索引,另一个启用时禁用。对于早期版本,它执行了非聚集索引查找,并为后者SQL Server执行聚簇索引搜索。实际上,查询成本没有差异。
回到我的问题:我们真的需要在已经有一个非聚集索引的密钥上创建非聚簇索引,这会提高性能吗?
图片1:
图片2:
答案 0 :(得分:0)
第一个问题:当我们在某个字段上有一个集群索引时,不需要在该字段上使用非集群索引。
第二个问题:在您的查询中,您只选择OrderId列,在这种情况下,非聚集索引和聚簇索引之间没有任何不同。如果要从Sales.OrderDetail表中选择另一个字段,当然您会看到与聚簇索引和非聚簇索引的性能不同。