Есть таблица в БД где хранятся объявления по аренде недвижимости
kvartiras
id | tip_obekta | cena | etag | etagnost | и тд. Ещё около 20 полей.
1 | Квартира | 1000 | 1 | 5 |
На сайте есть фильтр для выбора объявлений по параметрам
public function getAllAds(Request $request){
$query = Kvartira::query();
//Если применен фильтр
if($filter != 'Фильтр не применен'){
//Поиск по области
$query->when(isset($filter['oblast']) && $filter['oblast'] != null, function($query)
use($filter){
return $query->where('oblast', $filter['oblast']);
});
//Поиск по городу
$query->when(isset($filter['gorod']) && $filter['gorod'] != null, function($query)
use($filter){
return $query->where('gorod', $filter['gorod']);
});
После применения фильтра я получаю итоговые данные
$ads_arr = $query->where('control', 'Активно')
->orderBy('top', 'desc')
->orderBy('updated_at', 'desc')
->paginate(50);
Сортирую по 2 полям top , updated_at
Top - Если объявление подано в ТОП то получим вначале их,
и по полю created_at и получаю пагинацией по 50 записей.
Если в БД - 50 тысяч объявлений то при запросе Первой страницы
Результат возвращается через 2, 3 секунды.
А если запрос например объявлений со страницы 900 то = Результат 16, 17 секунд
Как уменьшить время получения результата на больших страницах?