Laravel по-русски

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

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

#1 Re: Laravel 5.x » Подсчет данных из большой таблицы » 01.08.2017 13:16:00

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

#2 Laravel 5.x » Подсчет данных из большой таблицы » 01.08.2017 02:23:35

munris
Ответов: 2

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

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