当使用窗口函数并且谓词包含变量时,SQL Server使用scan而不是seek
|
看看这个小提琴: http://sqlfiddle.com/#!6/18324/2 针对视图B的查询,展开第一个执行计划. 跆拳道??? 查询是等价的,不是吗?为什么文字产品寻求和变量扫描? This post最接近问题,从那里起作用的解决方案是使用选项(重新编译)(谢谢你,Martin Smith).但是,这对我不起作用,因为我的查询是由我的ORM库(实体框架)生成的,我不能手动修改它们. 在摆弄这个问题时,我注意到执行计划中的“Segment”块总是丢失谓词.为了验证这一点,我根据具有min函数的子查询重新构造了查询(参见视图D).瞧! – 针对D视图的两个查询都产生相同的计划. 然而,坏消息是我无法使用这种最小功率技巧,因为在我的实际设置中,Y列实际上是几列,所以我可以按它们排序,但我不能接受它们的min(). 注1:这与引爆点无关,因为表中只有2条记录. 解决方法可能这个会奏效select a.X,a.Y from A a
cross apply
(select top 1 * from A t where t.X = a.X order by t.Y asc) as idx
SQLFiddle http://sqlfiddle.com/#!6/a3362/2 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SQLServer 2000 升级到 SQLServer 2008 性能之需
- sql-server – 数据库图(ER图/表格布局)用于测量
- sql – 实现标记的方法 – 各自的优点和缺点
- sql-server – 每个实例的SQL Server Express内存
- sql-server – 我可以将SQL Server与SQL Server
- sql – 从包含数百万条记录的表中删除
- sql-server – 如何在sql server 2005中获取x和y
- SQL联合导致“将varchar值转换为int时转换失败”
- .net – 我们应该对数据库进行非规范化以提高性能
- 从一列复制到另一列(不同的表相同的数据库)mysql
