我正在编写一个涉及使用WITH子句使用多个子查询的查询。
即。
WITH z as
(WITH x AS
(SELECT col1, col2 FROM foo LEFT JOIN bar on foo.col1 = bar.col1)
SELECT foo, bar
FROM x
INNER JOIN table2
ON x.col2 = table.col2)
SELECT *
FROM z
LEFT JOIN table3
ON z.col1 = table3.col2
实际上,还有一些子查询和更多列。在子查询表(在本例中为x或z)上使用SELECT *是否存在任何性能问题?
我想避免在一个查询中多次重新键入相同的列名,但也需要优化性能。
答案 0 :(得分:3)
答案取决于数据库。 CTE可以通过以下方式处理:
在第一种方法中,额外的列可能会对性能产生很小的影响。在第二个,应该没有效果。
也就是说,通常支配查询性能的是join
和group by
的工作。假设列不是非常大,我不担心在CTE中使用select *
的性能影响。
我会问你如何写CTE。不需要嵌套的CTE,因为它们可以按顺序定义。