У меня очень распространенная проблема, но я не могу найти хороший ответ.
Мне нужно получить строки таблицы из таблицы, а также достаточно информации для разбивки этих данных на страницы. Так что вообще мне нужна очень грубая оценка общего количества строк (вообще все, что мне нужно знать, это ceil(count()/50)
).
Поэтому count()
действительно переборщил. И у меня уже есть команда SELECT * FROM table LIMIT 0, 50
, поэтому, если ее можно добавить к этой команде, тем лучше.
Я слышал о SQL_CALC_FOUND_ROWS
. Но я также слышал, что это не особенно эффективнее, чем просто делать count
. «К сожалению, использование SQL_CALC_FOUND_ROWS имеет неприятные последствия для устранения любой оптимизации LIMIT, которая может произойти».
Итак, в целом, я думаю, что использование оценки строк в MySQL – это путь. Но я не знаю, как это сделать. Или как это может быть.
Примечание1: В моей ситуации большинство таблиц, с которыми я работаю, просто обновляются несколько раз в день, не все время. Примечание2: Я использую PDO с php.
Еще одна интересная идея, которую я нашел:
Лучшим вариантом является преобразование пейджера в «следующую» ссылку. Предполагая, что на странице должно быть 20 результатов, тогда запрос должен использовать LIMIT из 21 строки и отображать только 20. Если 21-я строка существует в результатах, есть следующая страница, и вы можете отобразить «следующую» ссылку.
Если вам не нужен общий счет таблицы, это действительно решение для быстрого доступа.
Это старая тема, которая была избита до смерти. Много раз. Count – это самый быстрый способ получить количество строк в типичной таблице. Но если вы никогда ничего не удаляете из него (это странное предположение, но будет работать в некоторых случаях.), Тогда вы можете просто получить идентификатор последней строки (что может быть быстрее, но не обязательно). Это также соответствовало бы вашим оценкам, поскольку, скорее всего, это будет неверно.
Но опять же, если вы используете, например, myisam, то ничто не сравнится со счетом (что верно для большинства случаев).