在子查询中使用LIMIT ALL有什么好处?

问题描述 投票:0回答:2

在研究一个不相关的主题时,我注意到在IBM知识中心网站上为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()结果。”

BTW ......我的问题与IBM的例子中使用“random()”无关。

谢谢!

sql netezza sql-limit
2个回答
0
投票

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

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


0
投票

我已经看到它在查询系统目录视图(那些以'_'开头)时经常使用,因为优化器提示会导致计划不将基础目录表的整个内容从主机上的(Postgres)数据库中拉出来并将其内容发送给SPU。一般来说,这是个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.