2

テーブル構造:

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

ここに画像の説明を入力

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 に答える