繁体   English   中英

SQL Server查询优化器如何从特定表的可用索引中选择非聚集索引?

[英]How does the SQL Server query optimizer choose non clustered indexes from available indexes for particular table?

我有以下针对serviceregistration非聚集索引。

Index Name ---------------+ Column Name ----------------- + Index Type
IX_SERVICEREGISTRATION_I  |  SERREGNO                     | NONCLUSTERED   
IX_SERVICEREGISTRATION_II |  SERREGNO, SERCUSTID          | NONCLUSTERED
IX_SERVICEREGISTRATION_III|  PLACEID, JOBID, SERREGNO     | NONCLUSTERED

查询1:

Select CustomerName, Place 
From dbo.ServiceRegistration
Where SERREGNO = 'JAN1234' And PLACEID = 1

查询2:

Select CustomerName, Place 
From dbo.ServiceRegistration
Where SERREGNO = 'JAN1234' And SERCUSTID = 'A123'

查询3:

Select CustomerName, Place 
From dbo.ServiceRegistration
Where JOBID = 5 And PLACEID = 1 And SERREGNO = 'JAN1234'

上面创建的索引是否对这些查询有用?

  • 查询#1可以使用IX_SERVICEREGISTRATION_I
  • 查询#2可能使用IX_SERVICEREGISTRATION_II
  • 查询#3可能使用索引#3

只有在查询中使用最左边n列时,才可能使用任何复合索引(由多于一个列组成),这就是为什么查询#1和查询#2都不能使用索引#3的原因。

但是索引的实际使用将取决于更多的事情-例如您要使用此查询从整个表中选择几行?

索引不会“覆盖”所有查询(例如,没有查询可以仅通过查看索引就可以返回您要查询的值),这通常会限制索引的实用性。 如果您要向任何索引添加INCLUDE (CustomerName, Place)那么使用它们的可能性将大大提高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM