Каковы преимущества использования LIMIT ALL в подзапросе?

#sql #netezza #sql-limit

#sql #netezza #sql-limit

Вопрос:

Исследуя несвязанную тему, я заметил использование 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 Knowledge Center:

«ОГРАНИЧЕНИЕ ALL в подзапросе предотвращает его включение в родительский запрос, а функция random() вызывается только один раз для каждой строки tblA, и, следовательно, один и тот же результат random() проверяется в каждом предложении WHEN».

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

Спасибо!

Ответ №1:

Я понимаю, что для всех баз данных, которые поддерживают LIMIT , LIMIT ALL это то же самое, что использовать no LIMIT .

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

Ответ №2:

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