我有两个非常相似的查询,第一个使用 Linq ExecuteQuery 方法需要 30 秒,而第二个查询是中间的。
我也在 Microsoft SQL Server Management Studio 中执行查询,这两个查询的响应时间为 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 的视图,它有两个索引
- 索引 1(id_tank,日期升序)
- 索引 2(id_tank, date desc)
注意 2:如果我首先执行第二个查询,结果是相同的:Query1 慢,Query 2 快。
注3:视图有数百万个寄存器,不同日期和坦克的结果是相同的。