Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте, есть следующая проблема.
Есть большая таблица на почти 200к записей, с различными данными, которые нужно анализировать, запросы элементарные, никаких вложенностей, несколько where и whereDate, обернул это в несколько scopes.
Типичные подсчеты, используется только count записей в базе или sum() значений:
Service::byDate($this->daterange[0], $this->daterange[1])->paymentCash($operator->id)->sum('price')
Service::byDate($this->daterange[0], $this->daterange[1])->servicesByOperator($operator->id)->count()
Scopes:
public function scopeByDate($query, $dateFrom, $dateTo)
{
return $query->whereDate('created_at' , '>=', Helper::formatDateForQuery($dateFrom))
->whereDate('created_at' , '<=', Helper::formatDateForQuery($dateTo));
}
public function scopePaymentCash($query, $operator_id)
{
return $query->where('operator_id', $operator_id)->where('payment_status', 1)->where('repayment_status', 0)->where('payment_method', 1);
}
public function scopeServicesByOperator($query, $operator_id)
{
return $query->where('operator_id', $operator_id);
}
Всего таких подсчетов 10, они типичные, меняются только параметры.
Проблема заключается в очень долгом подсчете, данные за промежуток в один день считаются около 30 секунд, а обычный daterange в работе от 2 недель до нескольких месяцев. Не могу понять, в чем причина такого долгого подсчета?
Изменено munris (01.08.2017 02:24:34)
Не в сети
какие есть индексы на таблице?
Не в сети
constb спасибо, совсем забыл, правильно выставленные индексы помогли добиться скорости построения данных до 4 секунд за месячный диапазон, что очень хорошо.
Не в сети
Страницы 1