这里是我的查询指数+ SQL Server 2005中
Declare @StartDateTime datetime, @EndDateTime datetime
Select @StartDateTime = '2010-11-15', @EndDateTime = '2010-11-16'
Select PracticeCode, AccountNo, ProcCd, Modifier , ChargeDos, Paid as Amt, CreatedDate,
case When Paid > 0 then 'P'
When Paid = 0 and WrittenOff = DueAmt then 'A'
Else 'O'
End as Status
From Trn_Postings
Where CreatedDate >= @StartDateTime and CreatedDate <= @EndDateTime
--and ManualOverride in ('S','F','X','G','O')
and ManualOverride in ('N','U')
编辑:创建日期是包含&时间记录的创建
日期我有单独的索引日期时间列在CreatedDate和ManualOverride上。但执行计划显示聚簇索引扫描。该表有近百万条记录,并且在不久的将来可以增长4到5倍。
最令人惊讶的部分是,如果我更改下面的where子句,它使用这两个索引。我只是不知道为什么。
Where CreatedDate >= @StartDateTime and CreatedDate <= @EndDateTime
and ManualOverride in ('S','F','X','G','O')
--and ManualOverride in ('N','U')
如何使SQL中使用索引...
而且如果我使用一个不在条款不会被使用的索引。
因为它的立场,优化*不考虑*索引。它*可能是错误的*在不使用索引为您的第一个案件,但很可能,它不是。你能为这两种情况发布计划吗? – 2010-11-16 07:49:43
使用索引并不总能让您获得更好的性能。一个简单的情况是,强制编译器使用索引的速度会比较慢,通过执行返回** all **行的select。 – 2010-11-16 07:54:19
'通过ManualOverride'从Trn_Postings组中选择ManualOverride,COUNT(*)。如果N和U代表此列中的大部分值,则表示索引对查询不会有用,所以优化器不太可能使用它。 – 2010-11-16 08:02:27