Lim*_*mey 5 sql sql-server msdtc linked-server
我遇到了这种奇怪的情况,我想我会把它扔到人群中找出原因.
我有一个查询加入链接服务器上的表:
select a.*, b.phone
from table_a a,
join remote.table_b b on b.id = a.id
(lots of data on A, but very few on B)
Run Code Online (Sandbox Code Playgroud)
这个查询是永远在说话(从来没有发现实际的运行时间),那时我注意到B没有索引,所以我添加了它,但这并没有解决问题.最后,出于绝望,我试过:
select a.*, b.phone
from table_a a,
join (select id, phone from remote.B) as b on b.id = a.id
Run Code Online (Sandbox Code Playgroud)
在我看来,这个版本的查询应该具有相同的结果,但是请注意,它会立即响应!
任何想法为什么会挂起而另一个过程很快?是的,我确实等待确保在运行两者之前已经构建了索引.
这是因为有时(很多时候)由sql server引擎自动生成的执行计划并不像我们想要的那么好和明显。您可以查看这两种情况下的执行计划。我建议在第一个查询中使用提示,例如:INNER MERGE JOIN。
以下是有关此内容的更多信息:
http://msdn.microsoft.com/en-us/library/ms181714.aspx
| 归档时间: |
|
| 查看次数: |
9246 次 |
| 最近记录: |