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