【问题标题】:When is it not appropriate to use Derived tables?什么时候不适合使用派生表?
【发布时间】:2011-03-10 05:40:30
【问题描述】:

SO post 详细介绍了派生表与临时表在性能方面的一些优势。

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

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

【问题讨论】:

标签: sql derived-table


【解决方案1】:

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

CREATE TEMPORARY TABLE foo AS SELECT ...;

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

-- sometime later

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

【讨论】:

    【解决方案2】:

    我更愿意在临时表上进行自联接,而不是派生表。

    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)。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-09-13
        • 2010-09-19
        • 1970-01-01
        • 2019-02-28
        • 2019-08-25
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多