私はLinq ExecuteQueryメソッドを使用して2つのクエリは非常にsimilarsを持って、Linqのパフォーマンス:2つのクエリ、すぐに最初の応答と2番目の非常に遅い
Microsoft SQL Server Management Studioでもクエリを実行し、2つのクエリの応答時間は0秒です。
IEnumerable<ViewDataTanksDataDevice> res=
this.ExecuteQuery<ViewDataTanksDataDevice>(
"SELECT TOP 1 * FROM ViewDataTanksDataDevicesSB WHERE id_tank = {0} AND date <= {1} order by date desc",
new object[] { tankId, date });
注1(低速)
IEnumerable<ViewDataTanksDataDevice> res=
this.ExecuteQuery<ViewDataTanksDataDevice>(
"SELECT TOP 1 * FROM ViewDataTanksDataDevicesSB WHERE id_tank = {0} AND date >= {1} order by date",
new object[] { tankId, date });
クエリ2(高速)クエリ1:ViewDataTanksDataDevicesSBスキーマ結合を有する図であり、それは2つの索引
を有します- インデックス1(id_tank、date asc)
- インデックス2(id_tank、日付DESC)
注2:私は最初の2番目のクエリを実行すると結果は同じです:Query1を遅くし、クエリ2速いです。
注3:ビューには数百万のレジスタがあり、その結果は日付とタンクによって異なります。
実行計画はあなたに何を伝えますか? –
クエリ2を最初に実行し、クエリ1を最後に実行するとどうなりますか? –
コードからのクエリと実行計画の両方を実行しているときに、SQL Serverのプロファイラツールを調べることを検討することもできます。インデックス問題(ASC対DESC)のような臭いがあります – Krumelur