mak_sim2001
Новичок
Постраничный вывод и оптимизация
У меня есть поиск по ключевому слову в базе данных(MySQL 4,...), который выбирает из таблицы 'business' компании по условию where, для каждой компании из другой таблицы 'business_businesscategory', выбирается категории этой компании(до 5 категорий у каждой компании), так же для каждой компании из таблице 'business_location' достаются все адреса компании(до 40 адресов (вообще не ограничено)), все это делается одним запросом с помощью join-ов. В результате я получаю на каждую компанию до 5*40=200 записей. Сортирую результат и для каждой компании получаю одну "строку", отправляю все в TEMPORARY TABLE, и достаю запросом с LIMIT 0 30, кол-во записей на страницу. Соответственно когда пользователь выбирает кликает страница 2 вся процедура повторяется только LIMIT 30 30 и т.д.
Сейчас в таблице business 30тыс записей и начались тормоза, а именно я замерял первый большой запрос выполняется до 7-8 sec, если он возвращает около 8 тыс. записей сортировка идет около 0,2 sec(это пока устраивает) и на все остальное уходят 0,01... sec.
Тот же запрос в phpMyAdmin(PMA) выполняется за (8069 total, Query took 0.4660 sec) даже 11тыс строк до 0,5sec правда PMA выставляет автоматом LIMIT 30 записей на страницу.
Хотел узнать можно ли как-то по другому организовать этот поиск с постраничным выводом.
У меня есть поиск по ключевому слову в базе данных(MySQL 4,...), который выбирает из таблицы 'business' компании по условию where, для каждой компании из другой таблицы 'business_businesscategory', выбирается категории этой компании(до 5 категорий у каждой компании), так же для каждой компании из таблице 'business_location' достаются все адреса компании(до 40 адресов (вообще не ограничено)), все это делается одним запросом с помощью join-ов. В результате я получаю на каждую компанию до 5*40=200 записей. Сортирую результат и для каждой компании получаю одну "строку", отправляю все в TEMPORARY TABLE, и достаю запросом с LIMIT 0 30, кол-во записей на страницу. Соответственно когда пользователь выбирает кликает страница 2 вся процедура повторяется только LIMIT 30 30 и т.д.
Сейчас в таблице business 30тыс записей и начались тормоза, а именно я замерял первый большой запрос выполняется до 7-8 sec, если он возвращает около 8 тыс. записей сортировка идет около 0,2 sec(это пока устраивает) и на все остальное уходят 0,01... sec.
Тот же запрос в phpMyAdmin(PMA) выполняется за (8069 total, Query took 0.4660 sec) даже 11тыс строк до 0,5sec правда PMA выставляет автоматом LIMIT 30 записей на страницу.
Хотел узнать можно ли как-то по другому организовать этот поиск с постраничным выводом.