Sql server 从union中选择top将导致SQL Server
我目前正在研究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
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名。
你可以在这个网站上查阅