Коли ви 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 *
. Чи є різниця?