[英]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'
上面创建的索引是否对这些查询有用?
IX_SERVICEREGISTRATION_I
IX_SERVICEREGISTRATION_II
只有在查询中使用最左边的n列时,才可能使用任何复合索引(由多于一个列组成),这就是为什么查询#1和查询#2都不能使用索引#3的原因。
但是索引的实际使用将取决于更多的事情-例如您要使用此查询从整个表中选择几行?
索引不会“覆盖”所有查询(例如,没有查询可以仅通过查看索引就可以返回您要查询的值),这通常会限制索引的实用性。 如果您要向任何索引添加INCLUDE (CustomerName, Place)
, 那么使用它们的可能性将大大提高。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.