小编lit*_*een的帖子

为什么我的 ORDER BY 在 EXCEPT 之前(慢)而不是之后(快)对两个表进行排序?

SQL Server 2008 R2 查询优化器拼图

我们有两个表,都包含 900 万行。70.000 行不同,其他相同。

这很快,13秒,

select * from bigtable1
except select * from similar_bigtable2
Run Code Online (Sandbox Code Playgroud)

这对输出进行排序并且也很快,13 秒,

select * into #q from bigtable1
except select * from similar_bigtable2
select * from #q order by sort_column
Run Code Online (Sandbox Code Playgroud)

虽然这非常缓慢:

;with q as (
    select * from bigtable1
    except select * from similar_bigtable2
)
select * from q order by sort_column
Run Code Online (Sandbox Code Playgroud)

甚至我有时用来提示 SQL Server 需要预先计算查询的某个部分才能继续执行的“技巧”也不起作用并导致查询速度变慢:

;with q as (
    select top 100 percent * from bigtable1
    except select * from …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

12
推荐指数
1
解决办法
2869
查看次数

标签 统计

sql-server ×1

sql-server-2008 ×1