2017-05-15 15 views
3

WHERE句のdatetime列を使用して、約9,800万行という非常に大きなテーブルからデータを照会しようとしています。完了には約12分かかりますが、これは明らかに受け入れられません。クエリは単純です:DateTime WHERE句を使用して大規模テーブルを照会します。

SELECT ID, DateTime1, DateTime2, Value1, Value2 
FROM dataTable 
WHERE DateTime1 >= '2017-05-15 09:00' AND 
     DateTime1 <= '2017-05-15 09:30' 

テーブルには、以下の構造を有する:

Column Name | DataType 
------------------------- 
ID   | float 
DateTime1 | datetime 
DateTime2 | datetime 
Value1  | float 
Value2  | varchar(20) 

テーブルは以下のインデックスがありますSQL Serverで

Nonclustered: DateTime1, DateTime2, ID, Value2 
+0

使用しているデータベースで質問にタグを付けてください。また、インデックスに 'Value1'を置くべきです。 –

答えて

1

あなたのインデックスをValue1をカバーしていないので、各行iのテーブルからその列を取得する必要があります既存のインデックスを使用しています。

create nonclustered index ix_dataTable_DateTime1_cover 
    on dbo.dataTable (DateTime1) 
    include (Id, DateTime2, Value1, Value2); 

またはValue1が含まれるように、既存のインデックスを変更します。あなたがカバーインデックスを作成することができ

はそうのような(クエリで必要とされるすべての列が含まれます)。

また、実行計画を確認してください。パフォーマンスの問題が残っている場合は、Paste The Plan @ brentozar.comを使用して実行計画を共有してください。指示はHow to Use Paste the Planです。

+0

ありがとう、私はインデックスを変更する/新しいものを追加すると私はあなたに戻ってきます。 –

0

あなたの場所にはDateTime1しかありませんので、この列のインデックスのみを作成してください。 複雑なインデックスは、DateTime1 + DateTime2 + ID + Value2のようなすべての部分から文字列をまとめるようなものです。ああ、それは遅くなければならない。

関連する問題