Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подсчёт строк до определённого колличества
 
 автор: Zhazhah   (31.05.2010 в 17:53)   письмо автору
 
 

Здравствуйте. У меня таблица с большим объёмом данных поиск полнотекстовый. т.е в результате поискового запроса получаю очень много записей. А проблема такая если при поиске подсчитывать общее количество найденных записей то запрос будет выполняться довольно долго что мне совсем не нужно. Тем более что поиск выполняется с limit 0,10 понятное дело что если не подсчитывать количество строк, запрос выполнится за 200-400 мс. И вот вопрос, как подсчитать количество строк только до 500 т.е если больше 500 пользователю вывести "найдено больше 500 записей" что то на подобие Яндекса или Google ведь если бы Google подсчитывал точное количество записей то запросы точно не возвращались бы за 300мc.

  Ответить  
 
 автор: Axxil   (03.06.2010 в 14:18)   письмо автору
 
   для: Zhazhah   (31.05.2010 в 17:53)
 

Выборка в любом случае будет идти по всей таблице. Так что оптимизацию нужно в другом направлении производить.

>> Тем более что поиск выполняется с limit 0,10

Это миф, что если поставить limit то будет быстрее работать. В любом случае будет построена полная выборка и только потом из неё будут выделены первые 10 строк.

Другое дело, что можно избежать повторного запроса на подсчёт всех элементов выборки, если использовать SQL_CALC_FOUND_ROWS

SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE (conditions) LIMIT 10;
SELECT FOUND_ROWS();


В таком случае первый запрос вернёт первые 10 значений списка и сохранить в памяти полное число строк, а второй запрос это самое полное число строк в выборке вернёт прям из памяти.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования