SQLServerに約100万行のテーブルがあります。ID(PK)、ステータス(int)、および日時列があります。また、日時列にインデックスを作成しました。
今、私は理解できない効果を見つけました。
SELECT status
FROM table
WHERE dateTime BETWEEN '2010-01-01T00:00:00' AND '2010-01-02T12:00:00'
このステートメントは3664行を返します。約150ミリ秒実行され、実行プランは、キールックアップを使用してインデックスシークを実行することを示しています。
さて、次のように変更すると(時間を12から13に変更するだけです):
SELECT status
FROM table
WHERE dateTime BETWEEN '2010-01-01T00:00:00' AND '2010-01-02T13:00:00'
このステートメントは3667行を返します。実行時間は約600ミリ秒で、抽出計画では主キーを使用していることが示されています。
分かりません。3667以上の行では、シークがはるかに高速であっても、常に主キーを使用します。
説明はありますか?