如何解决从联合中选择顶部将导致SQL Server
我目前正在研究SQL Server中的优化器,并且对从联合结果中选择数据有疑问。
如果我执行下面的查询
SELECT TOP (100) ...
FROM (
SELECT ... FROM TBL1
UNION ALL
SELECT ... FROM TBL2
) AS A
ORDER BY COL1,COL2
我认为(这是我学到的)内部优化程序将此查询更改为下面的查询,因此它最多可以从每个表中读取100行。
SELECT TOP (100) ...
FROM (
SELECT TOP (100) ... FROM TBL1 ORDER BY COL1,COL2
UNION ALL
SELECT TOP (100) ... FROM TBL2 ORDER BY COL1,COL2
) AS A
ORDER BY COL1,COL2
但是,当我签出执行计划时,优化器从两个表中读取了全部数据(使用聚集索引扫描)并对它们进行了排序。
谁能告诉我它在内部如何工作?优化器扫描整个表是否有任何特定原因?
解决方法
SQL中有一个优先顺序。据此,TOP()
在ORDER BY
子句之后进行求值。因此,首先选择所有记录,然后对其进行排序,然后仅选择前100个记录。
您可以在此站点上参考。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。