База данных: SQL Pagination - Сколько страниц? - PullRequest
0 голосов
/ 09 октября 2009

Я использую MySQL LIMIT для отображения 50 строк (страниц) одновременно, например:

SELECT cols
FROM table
LIMIT 49, 50

Какой самый эффективный способ для меня определить, сколько "страниц" у меня есть в моем наборе результатов (сколько всего записей производит мой запрос)?

Прежде чем запустить приведенный выше код, я должен просто выполнить быстрый и грязный:

SELECT COUNT(cols)
FROM table

чтобы определить количество строк в моем наборе результатов?

(Это кажется неэффективным, чтобы выполнить 2 запроса для этого)

Ответы [ 3 ]

1 голос
/ 10 октября 2009

Вы можете использовать функцию FOUND_ROWS ():

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

0 голосов
/ 09 октября 2009

Одна из возможностей (которая может работать только с некоторыми базами данных) - заглянуть в план запроса, чтобы увидеть, что оптимизатор прогнозирует в виде общего числа строк. Например, в Oracle вы можете получить доступ к плану EXPLAIN и увидеть, что оптимизатор оценивает, скажем, x строк, которые будут возвращены в общей сложности. Точность этого, конечно, зависит от ряда факторов: насколько правильно индексируются таблицы, насколько не устарела статистика и т. Д. И т. Д.

0 голосов
/ 09 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...