Ano*_*mus 2 sql-server-2008 sql-server t-sql union
假设下面的查询是合法的并且执行成功,有什么办法可以加快速度吗?
SELECT foo from T1 --T1 is a huge (>5e6 rows) table with no indexes
UNION
SELECT bar from T1
UNION
SELECT baz from T1
UNION
SELECT qux from T1
Run Code Online (Sandbox Code Playgroud)
上面显示的四列都是 type nvarchar(128)
、非稀疏和可为空的。我使用的是 SQL Server 2008。谢谢!
编辑:提供了更多信息。我无法添加索引,因为它是 Stage 表。另外,删除DISTINCT
s; 我完全忘记了这一点。
Phil:我如何将其合并为一个查询?
你当然可以项目foo
,bar
,baz
和qux
在一个单一的扫描(SELECT foo, bar, baz, qux FROM T1
)。甲CROSS APPLY
TVF可以变换每行(4列)转换成4行(1根),然后应用在上面DISTINCT。如果原始计划有 4 次 T1 扫描,这将主导成本,这可能会更好。