Подскажите, пожалуйста, способы оптимизации для этого запроса. Или мне нужно внести некоторые изменения, чтобы установить индексы.
$subQuery->selectRaw("
product_zip,
AVG(case
when product_time > $to_start_of_month
and product_time < $to_end_of_month
then product_price / product_covered_area end
) as current_month_price,
AVG(case
when product_time > $from_start_of_month
and product_time < $from_end_of_month
then product_price / product_covered_area end
) as previous_month_price
");
$subQuery->join('types', function ($join) {
return $join->on('products.product_type_id', '=', 'types.type_id');
});
$subQuery->where('types.type_property', $type_property);
$subQuery->having('current_month_price', '>', 0);
$subQuery->having('previous_month_price', '>', 0);
$subQuery->groupBy('product_zip');