[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SQL_CALC_FOUND_ROWS vc COUNT(*)
tarantyl
Добрый день. Разгорелся тут у меня спор в одной социалке, который не утихает уже который день. Задача стояла такая: постараничное отображение данных, т.е. мы выбираем допустим первых 10 и считаем сколько всего записей. Я предложил юзать SQL_CALC_FOUND_ROWS, но тут же меня облажали типа это неповоротливый костыль и лучше юзать два запроса с лимитом и без, или Count(*). Порылся в старых конспектах, почитал еще раз как организованы БД, полазил по сайту разработчика, вроде я прав, но уже куча народу доказывает что 2 запроса рулят sad.gif
Потестировал сами запросы, по времени вроде быстрей мой способ, но моим оппонентам этого мало smile.gif

Кто что применяет при подобной задаче, просто стало интерестно??



Спустя 35 минут, 5 секунд (29.05.2009 - 12:58) vasa_c написал(а):
При SQL_CALC_FOUND_ROWS не работают индексы.

Если выборка производится по индексам, то лучше два запроса COUNT + LIMIT.
Если что-то громоздкое и тяжёлое, то лучше SQL_CALC_FOUND_ROWS.

Спустя 1 минута, 34 секунды (29.05.2009 - 13:00) apc написал(а):
Я использую 2 запроса.
Первый узнаю кол-во записей, во втором непосредственно выборка.
Мне так удобно...

Спустя 9 часов, 1 минута, 21 секунда (29.05.2009 - 22:01) kirik написал(а):
Юзаю везде SQL_CALC_FOUND_ROWS, удобнее, да и при больших таблицах и сложных запросах (как сказал vasa_c) будет производительнее.

Спустя 18 часов, 4 минуты, 59 секунд (30.05.2009 - 16:06) tarantyl написал(а):
ну да при фултекст-поиске SQL_CALC_FOUND_ROWS гораздо предпочтительней, плюс я больше склоняюсь к этому способу т.к. LIMIT (если я точно помню) последнее действие которое выполняет СУБД перед отправкой ответа клиенту, т.е. при наличии в строке SQL_CALC_FOUND_ROWS второго запроса не происходит а просто на определенном этапе записывается результат

Правда мне тут езе расказывали что при поиске сфинксом SQL_CALC_FOUND_ROWS совсем непредпочтительно, сам не пользовался подтвердить не могу

Спустя 1 час, 13 минут, 13 секунд (30.05.2009 - 17:20) vasa_c написал(а):
Ещё раз повторяю - при CALC_FOUND не используются индексы.
Подавляющее большинство запросов, это выборка небольшой части данных из таблицы с использованием индексов. И CALC_FOUND здесь совершенно не в тему.

Спустя 4 дня, 23 часа, 30 минут, 53 секунды (5.06.2009 - 16:50) glock18 написал(а):
Я читал как-то на сайте mysql - очень многие жаловались на SQL_CALC_FOUND_ROWS из-за ее катастрофической медлительности на больших таблицах. Скорее всего из-за того как раз, что так не используются индексы. Самому вообще функция понравилась, если быть честным - там все равно два запроса wink.gif Еще одним надо выбрать FOUND_ROWS smile.gif

И еще - я впервые вижу, чтобы кто-то хвалил SQL_CALC_FOUND_ROWS)) Выглядит симпатично, но судя по всему она себя все же не оправдывает.

PS: запрос по большой таблице без использования индексов - это страшно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.