Доброго времени.
Есть стандартная постраничная навигация
$db_query="select count(*)
from ".DB_PREF."advert advert "
." where "
." advert.hide='show' "
." and advert.end_putdate > ".$GLOBALS["timeDayAdvert"]." "
.$params
.$this->add_db_query_country().$this->add_db_query_region().$this->add_db_query_city();
$db_query="
select *
." from ".DB_PREF."advert advert where"
." advert.hide='show' "
." and advert.end_putdate > ".$GLOBALS["timeDayAdvert"]." "
.$params
.$this->add_db_query_country().$this->add_db_query_region().$this->add_db_query_city()
." order by "
.( $this->name_sort ? " ".$init_sort_doska[$this->name_sort]." ".$this->type_sort." " : " advert.premium_adv DESC, advert.sort_time DESC ")
." limit ".($this->open_num_page_all_advert-1)*KOL_ADVERT_TO_ALL_PAGE." , ".KOL_ADVERT_TO_ALL_PAGE;
Тут все стандартно. Подсчет всех записей и выборка для разбиения .
в базе много записей (~800 тыс) - Время генерации страницы :
- с индексами - 3-5 секунды
- без индексов - 15-20 секунд
Хотел бы спросить , как все-таки решить проблему с select count , т.к она сильно нагружает ?
Предложили:
1. сделать в базе отдельно счетчик записей . Но так и не понял, для чего , если у меня всякие фильтры можно использовать.
2. нашел такой вариант , но так и не осмыслил его, как его реализовать. Цитата:
В таблице 700000 записей, нам нужно вывести десятую страницу с 10 записями с постраничной навигацией: выбираем не 10, а 41 запись (не забываем про офсет), выводим 10, но благодаря тому, что выбралась 31 запись вперед, мы знаем что еще есть как минимум 4 страницы на которые можно отобразить ссылки.
Может еще какие советы подкинете ? спасибо !