Каковы преимущества использования LIMIT ALL в подзапросе? - PullRequest
0 голосов
/ 25 марта 2019

Исследуя не связанную тему, я заметил использование LIMIT ALL в примере на веб-сайте IBM Knowledge Center для Netezza.Мне неясно, какие преимущества дает указание 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 в подзапросе предотвращает его включение в родительский запроси функция random () вызывается только один раз для каждой строки таблицы tblA, поэтому в каждом предложении WHEN проверяется один и тот же результат random (). "

Кстати ... Мой вопрос не имеет отношенияна использование "random ()" в примере IBM.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Я видел, что он часто используется при запросах представлений системного каталога (те, которые начинаются с '_'), поскольку подсказка оптимизатора приведет к тому, что план НЕ вытянет весь контент базовых таблиц каталога из базы данных (Postgres) на хосте и отправьте их содержимое в SPU. В общем, это хорошая идея, чтобы попробовать.

0 голосов
/ 25 марта 2019

Насколько я понимаю, все базы данных, поддерживающие LIMIT, LIMIT ALL, аналогичны использованию без LIMIT.

В некоторых случаях его можно использовать для «подсказки» оптимизатора запросов для создания запроса.планировать каким-то определенным образом.Я считаю, что приведенный выше отрывок взят из документации Netezza 7.0.

...