![]() |
1
2
另外,请尝试以下查询:
只是猜测:性能差异可能是因为
|
![]() |
2
2
你确定这些数据是最新的吗?使用 UPDATE STATISTICS :
您是如何运行查询的?如果通过存储过程,可能您在 parameter sniffing |
![]() |
3
1
执行计划图表不是很有用,因为它们没有显示所使用的索引。 最有用的信息来自以下查询
在这种情况下,SQL server如何执行查询: 服务器从高位到低位读取MessageCounter索引。对于每一行,服务器都在custered索引中嵌套seek以比较设备id。 对于设备2-4,这将很快结束,因为服务器在设备2-4的MessageCounter索引中找到一行。对于设备1,在服务器找到设备1的第一行之前,服务器需要600多万个seek操作。 读取deviceid索引并查找custered索引会更快。这应该在323k搜索后停止。甚至很糟糕。 您应该有一个包含设备id和MessageCounter的索引(正如Marcelo Cantos指出的)。 |
![]() |
4
1
我想这一定是因为如果你按
我想
另外,选择Guid.Comb作为聚集索引的原因是什么?我假定一个聚集索引
|
![]() |
5
0
我的第一个想法是,这可能是由于参数嗅探造成的—实际上,SQL Server在第一次运行查询时就提出了一个计划,但该查询并不代表典型的工作负载。看到了吗 http://www.sqlshare.com/solve-parameter-sniffing-by-using-local-variables_531.aspx 关于统计的建议很好,但我怀疑您需要查看这两个查询的查询计划。您可以在查询分析器中执行此操作—大约有三个按钮位于Execute按钮的右侧。尝试查看两个查询的计划之间有什么不同。。。 |
![]() |
6
0
这些查询是否发送到SQL Server 确切地 就像你贴的一样
还是NHibernate使用了参数化查询(
这也许可以解释这一点—SQL Server获取DeviceId=4的参数化查询,提出一个适用于该参数值的执行计划,但在下一次执行时,对于DeviceId=1,它会出错,而且第一个查询的执行计划对于第二种情况不再是最优的。 你能试着以相反的顺序执行这两个查询吗??先用设备ID=1,然后用设备ID=4-这会给你同样的结果吗?? |
![]() |
blogger13 · 视频租赁店数据库的规范化 4 月前 |
![]() |
ì¤ì¤í · 为什么LEFT INNER JOIN被弃用? 5 月前 |
![]() |
relatively_random · 确保两个表之间一致的共同参考 6 月前 |
|
Grenish Rai · Firestore错误“用户文档不存在” 9 月前 |
![]() |
Saijo-Shi · PLpgsql中的更新触发器 9 月前 |
![]() |
Dante · Django::配置不当:池不支持持久连接 10 月前 |
![]() |
YouLocalRUser · 删除重复行,保留第一行 11 月前 |