gpt4 book ai didi

sql-server - Linq 性能 : Two queries, 第一个立即响应,第二个非常慢

转载 作者:行者123 更新时间:2023-12-03 17:42:03 25 4
gpt4 key购买 nike

我有两个非常相似的查询,使用 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的 View ,它有两个索引

  1. 索引 1(id_tank,日期升序)
  2. 索引 2(id_tank,日期 desc)

注意 2:如果我先执行第二个查询,结果是相同的:查询 1 慢,查询 2 快。

注3: View 有数百万个寄存器,不同日期和 jar 的结果是相同的。

最佳答案

一周后解决了,查看执行计划(感谢Yahia的建议)!!!

在这两个查询中,我指定了 INDEX(感谢 Denis)并且我必须指定提示 NOEXPAND

NOEXPAND 说明可在以下位置找到:Table hints

所以,最终的查询是:

查询 1

IEnumerable<ViewDataTanksDataDevice> res= 
this.ExecuteQuery<ViewDataTanksDataDevice>(
"SELECT TOP 1 * FROM ViewDataTanksDataDevicesSB with (index(IX_ViewDataTanksDataDevicesSB_TankIdDate) noexpand) 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 with (index(IX_ViewDataTanksDataDevicesSB_TankIdDate) noexpand) WHERE id_tank = {0} AND date <= {1} order by date desc",
new object[] { tankId, date });

关于sql-server - Linq 性能 : Two queries, 第一个立即响应,第二个非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9640431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com