Когда вы COUNT(*)
учитываете индексы столбцов, это будет лучший результат. Mysql с движком MyISAM фактически хранит количество строк, он не считает все строки каждый раз, когда вы пытаетесь подсчитать все строки. (на основе столбца первичного ключа)
Использование PHP для подсчета строк не очень разумно, потому что вам нужно отправлять данные из mysql в php. Зачем это нужно, если вы можете добиться того же на стороне mysql?
Если COUNT(*)
выполняется медленно, вам следует выполнить EXPLAIN
запрос и проверить, действительно ли используются индексы и куда их следует добавлять.
Следующее не самое быстрое способ, но есть случай, когда COUNT(*)
он не совсем подходит - когда вы начинаете группировать результаты, вы можете столкнуться с проблемой, гдеCOUNT
самом деле не учитываются все строки.
Решение есть SQL_CALC_FOUND_ROWS
. Обычно это используется, когда вы выбираете строки, но вам все равно нужно знать общее количество строк (например, для разбиения на страницы). Когда вы выбираете строки данных, просто добавьте SQL_CALC_FOUND_ROWS
ключевое слово после SELECT:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
После того, как вы выбрали нужные строки, вы можете получить счет с помощью этого единственного запроса:
SELECT FOUND_ROWS();
FOUND_ROWS()
должен вызываться сразу после запроса выбора данных.
В заключение, все сводится к тому, сколько записей у вас есть и что находится в операторе WHERE. Вам действительно стоит обратить внимание на то, как используются индексы, когда есть много строк (десятки тысяч, миллионы и больше).
SELECT 1
и нетSELECT *
. Есть разница?