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

时间:2019-03-25 16:45:46

标签: sql netezza sql-limit

在研究一个不相关的主题时,我注意到在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()”无关。

谢谢!

2 个答案:

答案 0 :(得分:0)

我的理解是针对所有支持LIMIT的数据库,LIMIT ALL等于不使用LIMIT

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

答案 1 :(得分:0)

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