Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 01.08.2017 02:23:35

Подсчет данных из большой таблицы

Здравствуйте, есть следующая проблема.
Есть большая таблица на почти 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)

Не в сети

#2 01.08.2017 08:26:29

Re: Подсчет данных из большой таблицы

какие есть индексы на таблице?

Не в сети

#3 01.08.2017 13:16:00

Re: Подсчет данных из большой таблицы

constb спасибо, совсем забыл, правильно выставленные индексы помогли добиться скорости построения данных до 4 секунд за месячный диапазон, что очень хорошо.

Не в сети

Подвал раздела