Linq ExecuteQuery メソッドを使用すると、最初のクエリは 30 秒かかり、2 番目のクエリはすぐに実行されます。
Microsoft SQL Server Management Studio でもクエリを実行しましたが、2 つのクエリの応答時間は 0 秒です。
クエリ 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 (高速)
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: ViewDataTanksDataDevicesSB は SCHEMA BINDING を使用したビューであり、2 つのインデックスがあります。
- インデックス 1(id_tank、日付 asc)
- インデックス 2(id_tank, date desc)
注 2: 最初に 2 番目のクエリを実行すると、結果は同じになります。クエリ 1 は遅く、クエリ 2 は高速です。
注 3: ビューには数百万のレジスタがあり、日付やタンクが異なっても結果は同じです。