ある週に約18k行のテーブルがあり、別の週には22k行があります。
私はビューとインデックスを使用してデータを取得しています
SELECT TOP 100 * FROM my_view
WHERE timestamp BETWEEN @date1 AND
@date2
しかし、どういうわけか、22kの週はデータをより速く(約3〜5秒)取得しますが、他の週は少なくとも1分かかります。これらにより、wcfがタイムアウトします。私は何が欠けていますか?
ある週に約18k行のテーブルがあり、別の週には22k行があります。
私はビューとインデックスを使用してデータを取得しています
SELECT TOP 100 * FROM my_view
WHERE timestamp BETWEEN @date1 AND
@date2
しかし、どういうわけか、22kの週はデータをより速く(約3〜5秒)取得しますが、他の週は少なくとも1分かかります。これらにより、wcfがタイムアウトします。私は何が欠けていますか?
タイムスタンプフィールドにインデックスを適用します。
タイムスタンプのインデックスがすでにある場合は、実行プランでこのクエリに使用されているインデックスを確認してください。
インデックスヒントは、クエリにテーブルの結合が含まれ、他のテーブルへの結合に使用されている列が複数のインデックスと一致する場合にのみ機能します。その場合、データベースエンジンは、結合を行うために1つのインデックスを使用することを選択できます。調査から、別のインデックスを使用すると、クエリのパフォーマンスが向上することがわかります。その場合、使用するインデックスをデータベースエンジンに指示するインデックスヒントを提供します。
サンプルコードはインデックスヒントを使用します:
select [Order].[OrgId], [OrderDetail].[ProductId]
from [Order]
inner join [OrderDetail] **with(index(IX_OrderDetail_OrderId))** on [Order].[OrderId] = [OrderDetail].[OrderId]