количество оконных функций postgresql - PullRequest
0 голосов
/ 29 июня 2018

Я могу этот запрос SELECT COUNT(*) OVER(), id, name, date... FROM table WHERE user_id = 1 LIMIT 20, OFFSET 0 Мне нужен счетчик для нумерации страниц, как это работает? рассчитывается количество для каждой строки или только для одного раза?

Влияет ли это на использование индексов, поскольку я знаю, что функции могут иногда влиять на использование индексов, но в основном в предложениях where.

Существуют ли какие-либо проблемы с производительностью, если вы выполняете это так вместо двух отдельных запросов (считайте, а затем извлекайте данные)? Я не буду выполнять подзапрос, так как он будет выполняться для каждой строки.

Спасибо

1 Ответ

0 голосов
/ 29 июня 2018

Использование оконной функции более эффективно, чем выполнение двух запросов. На использование индекса невозможно повлиять.

Оконные функции рассчитываются после набора результатов, но до LIMIT и OFFSET. Результат добавляется в качестве дополнительного столбца в каждую строку.

Я не вижу, как общий счет, который вы рассчитываете с помощью этой оконной функции, будет полезен для нумерации страниц.

Кроме того, использование LIMIT и OFFSET бессмысленно без предложения ORDER BY.

...