首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL Server中从联合结果中选择top

在SQL Server中从联合结果中选择top
EN

Stack Overflow用户
提问于 2020-08-25 15:34:14
回答 1查看 35关注 0票数 1

我目前正在研究SQL Server中的优化器,我有一个关于从联合结果中选择数据的问题。

如果我执行下面的查询

代码语言:javascript
复制
SELECT  TOP (100) ...
FROM (
    SELECT  ... FROM TBL1
    UNION ALL
    SELECT  ... FROM TBL2
) AS A
ORDER BY COL1, COL2

我认为(这是我学到的)内部优化器将这个查询更改为下面的查询,因此它最多只能从每个表中读取100行。

代码语言:javascript
复制
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

但是,当我签出执行计划时,优化器从两个表中读取了全部数据(使用聚集索引扫描)并对它们进行了排序。

有人能告诉我它是怎么在里面工作的吗?优化器扫描整个表有什么特别的原因吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-25 16:54:09

在SQL中有一个优先级顺序。根据它,在ORDER BY子句之后计算TOP()。因此,首先挑选所有记录,然后排序,然后只选择前100个记录。你可以在这个网站上参考这一点。

SQL Select Precedence

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63574080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档