Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从union中选择top将导致SQL Server_Sql Server_Union - Fatal编程技术网

Sql server 从union中选择top将导致SQL Server

Sql server 从union中选择top将导致SQL Server,sql-server,union,Sql Server,Union,我目前正在研究SQL Server中的优化器,我有一个关于从联合结果中选择数据的问题 如果我执行下面的查询 SELECT TOP (100) ... FROM ( SELECT ... FROM TBL1 UNION ALL SELECT ... FROM TBL2 ) AS A ORDER BY COL1, COL2 我认为(这是我学到的)内部的优化器将这个查询更改为下面的查询,这样它最多可以从每个表中读取100行 SELECT TOP (100) ... F

我目前正在研究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()
orderby
子句之后进行求值。因此,首先选择所有记录,然后排序,然后只选择前100名。 你可以在这个网站上查阅