SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.10.2012 15:21:47

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

COUNT(*) vs FOUND_ROWS()

Кто нибудь сталкивался с информацией, что быстрее/оптимальнее, какая из этих двух пар запросов:

SELECT COUNT(*) FROM table
SELECT * FROM table LIMIT {o},{l}
 

или

SELECT SQL_CALC_FOUND_ROWS * FROM table LIMIT {o},{l}
SELECT FOUND_ROWS()
 


т.е. задача классическая, пагинатор, надо вынуть допустим 25 записей и при этом посчитать сколько их всего. Когда есть условия поиска (WHERE) то подходит только второй вариант, а вот если WHERE нет вообще?

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

Неактивен

 

#2 12.10.2012 15:57:16

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: COUNT(*) vs FOUND_ROWS()

http://www.mysqlperformanceblog.com/200 … ound_rows/

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson