什么时候不适合使用派生表?

时间:2010-06-30 16:15:27

标签: sql derived-table

SO post详细说明了Derived与临时表的性能优势。

除了性能之外,还存在哪些派生表不适合的情况。

每个帖子的一个答案都有用。

3 个答案:

答案 0 :(得分:1)

范围可能是一个。我认为临时表可以被其他事务/进程等访问。派生表仅限于声明它们的块。

答案 1 :(得分:1)

我希望在临时表上执行自联接而不是派生表。

CREATE TEMPORARY TABLE foo AS SELECT ...;

SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;

使用派生表,您必须将整个查询写两次:

SELECT ... 
FROM (SELECT ...)
JOIN (SELECT ...) ON ...conditions...;

但另一种解决方案是使用公用表表达式,它们与派生表略有不同:

WITH foo AS (SELECT ...)
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;

如果您使用支持此语法的数据库品牌(Microsoft,Oracle,IBM,PostgreSQL)。

答案 2 :(得分:1)

如果您必须在多次查询中访问临时表中的数据,则避免重复生成临时数据可能成本更低:

CREATE TEMPORARY TABLE foo AS SELECT ...;

SELECT ... FROM foo WHERE ...conditions...;

-- sometime later

SELECT ... FROM foo WHERE ...different conditions...;