我有一台与MS SQL集成的Oracle服务器作为链接服务器。目前我正在进行查询优化。我发现了那些写成如下的查询:
SELECT colName1, colName2, ..
FROM ORACLE.TBL_TBLENAME
WHERE something = @something
工作很慢。另一方面,相同的查询写为:
EXECUTE ('SELECT colName1, colName2, ..
FROM TBL_TBLENAME
WHERE something :something',@something) at ORACLE
工作得更快。
我关心的是执行计划。对于第一个查询,Estimated Subtree Cost为0.16,第二个查询为3.36。第二个查询执行“远程扫描”。我不知道这是好还是不好。
该查询应该经常运行(在1分钟内大约20个查询)。
答案 0 :(得分:1)
给你执行计划(我是一个oracle人而不是sql服务器人),看来第一个是在sql server端进行全表扫描和过滤(计算标量?),而第二个一个是将过滤器与oracle相加并且更快。
是oracle表上最新的统计信息(也许它认为表中只有几行,所以sql server决定更好地只获取整个表并在本地进行处理?)并且有什么直方图涉及“某事”吗?
如果第二个对你有益,那真的有问题吗?