【问题标题】:What are the benefits of using LIMIT ALL in a subquery?在子查询中使用 LIMIT ALL 有什么好处?
【发布时间】:2019-03-25 16:45:46
【问题描述】:

在研究一个不相关的主题时,我注意到在 IBM Knowledge Center 网站上的 Netezza 示例中使用了 LIMIT ALL。我不清楚在此处指定 LIMIT ALL 的好处,我正在寻求 IBM 的解释(引用如下)的澄清。我什么时候需要指定 LIMIT ALL?

SELECT CASE WHEN rand = .1 THEN 'A' WHEN rand = .2 THEN 'B' ELSE 'C' END
FROM (SELECT random() rand FROM tblA LIMIT ALL) subset

来自 IBM 知识中心:

"子查询中的 LIMIT ALL 阻止它被拉到父查询中,并且对于 tblA 的每一行,random() 函数只调用一次,因此在每个 WHEN 中测试相同的 random() 结果子句。”

顺便说一句...我的问题与 IBM 示例中“random()”的使用无关。

谢谢!

【问题讨论】:

    标签: sql netezza sql-limit


    【解决方案1】:

    我的理解是所有支持LIMIT的数据库,LIMIT ALL与不使用LIMIT是一样的。

    在某些情况下,它可能用于“提示”查询优化器以某种方式创建查询计划。我相信上面的摘录来自 Netezza 7.0 文档。

    【讨论】:

      【解决方案2】:

      我在查询系统目录视图(以“_”开头的视图)时经常使用它,因为优化器提示将导致计划不将底层目录表的全部内容拉出(Postgres)数据库在主机上并将其内容发送到 SPU。 总的来说,这是一个不错的尝试。

      【讨论】:

        猜你喜欢
        • 2016-04-17
        • 1970-01-01
        • 2014-09-02
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        • 2011-09-21
        • 2010-11-26
        相关资源
        最近更新 更多