2

表结构:

AID INT (primary key)

AName varchar(50)

B表结构:

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

B 表 AID 列上有一个 Non-Clustered。

我的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

在此处输入图像描述

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

4

1 回答 1

4

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

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

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

于 2013-07-16T03:58:40.340 回答