SQL Server 尝试优化具有多个UNION ALL的查询,所有UNION ALL都具有来自同一个表的选择

u7up0aaq  于 2023-01-12  发布在  其他
关注(0)|答案(1)|浏览(144)

我有一个dbo.tbl1,其中包含A、B、C等列,还有一个如下所示的查询:

select 'random description' as [description], A as [volume] from dbo.tbl1

UNION ALL

select 'another random description' as [description], B as [volume] from dbo.tbl1

UNION ALL

select 'yet another random description' as [description], C as [volume] from dbo.tbl1

这将继续许多更多的查询...进入一个巨大的CTE基本上有2列。
这是非常低效的,因为SQL Server对这些(许多)查询中的每一个都进行表扫描,而tbl1有数百万行,即使所有查询都来自同一个表。
我该怎么写,告诉SQL服务器只使用1个表扫描?我宁愿不改变tbl1...
我试着阅读了这方面的资料,在这里应用索引没有用,因为我每次都在询问整个表,所以我在寻找其他的东西。

y53ybaqx

y53ybaqx1#

假设表中有两行的以下设置...

CREATE TABLE tbl1
(
A int,
B int,
C int 
)

insert tbl1 VALUES (1,2,3),
                   (4,5,6);

......而且你希望这些结果
| 说明|体积|
| - ------|- ------|
| 随机描述|1个|
| 另一个随机描述|第二章|
| 又一个随机描述|三个|
| 随机描述|四个|
| 另一个随机描述|五个|
| 又一个随机描述|六个|
然后you can use

SELECT Description,
       Volume
FROM   tbl1
       CROSS apply ( VALUES (A, 'random description'),
                            (B, 'another random description'),
                            (C, 'yet another random description') 
                    )d(Volume, Description);

取消透视值对

相关问题