5

这篇SO 帖子详细介绍了派生表与临时表在性能方面的一些好处。

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

每个帖子的一个答案和一个例子会很有帮助。

4

3 回答 3

1

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

于 2010-07-29T23:07:58.363 回答
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)。

于 2010-07-31T00:52:02.363 回答
1

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

CREATE TEMPORARY TABLE foo AS SELECT ...;

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

-- sometime later

SELECT ... FROM foo WHERE ...different conditions...;
于 2010-07-31T00:55:10.397 回答