为什么有索引扫描?

时间:2013-07-16 03:38:03

标签: sql-server sql-server-2008

表格结构:

AID INT (primary key)

AName varchar(50)

B表结构:

BID        INT (primary key)
AID        INT
BeginTime  dateTime
EndTime    datetime

B表AID列上有非集群。

我的SQL查询如下:

    SELECT  dbo.A.AID ,
        AName
FROM    dbo.A
        INNER  JOIN dbo.B ON dbo.A.AID = dbo.B.AID
WHERE   GETDATE() BETWEEN BeginTime AND EndTime + 1

enter image description here

我认为应该是Index Seek,但为什么不呢?如何实现?提前感谢!

1 个答案:

答案 0 :(得分:4)

您的搜索条件正在使用BeginTime和EndTime,您需要在这些列上使用非聚集索引来实现搜索:

CREATE NONCLUSTERED INDEX IX_1 ON B
(
    BeginTime
)
INCLUDE
(
    EndTime, 
    AID
)

INCLUDE部分用于覆盖 - 它允许SQL Server满足来自此非聚集索引的查询,而无需返回表中以获取其他列。