wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.

Почему SQL запросы такие медленные?

Здравствуйте.
Суть такова. Имелся код под фреймворк Laravel, итог работы готорого была целая куча inner join. Вот сам код:

$this->product = $this->product->where(function ($query) use ($option, $value) {
            $i = 0;
            foreach($value as $single_value){
              if($i == 0){
                $query->whereHas('options', function($query) use($option, $single_value){
                  $query->where('name', $option)->where('value', $single_value);
                });
              } else {
                $query->orWhereHas('options', function($query) use($option, $single_value){
                  $query->where('name', $option)->where('value', $single_value);
                });
              }
              $i++;
            }
          });

7481e668a236484d9e3e617d5c3adc69.png

Сделал маленькие изменения:
$this->product = $this->product->whereHas('options', function ($query) use ($option, $value) {
            $i = 0;
            foreach($value as $single_value){
              if($i == 0){
                $query->where(function($query) use($option, $single_value){
                  $query->where('name', $option)->where('value', $single_value);
                });
              } else {
                $query->orWhere(function($query) use($option, $single_value){
                  $query->where('name', $option)->where('value', $single_value);
                });
              }
              $i++;
            }
          });

7067a1c940524efb9cd7767792857bfc.png

Как итог - менее сложный код без лишних join'ов. Но скорость стала ниже.
Более того, все остальные запросы (связи Laravel и прочее) стали работать более секунды (!).
0da194c1f8f24124b8094daabccb662b.png

С чем связано такое поведение?
Как быть?
Возвращать Join-ы? Не думаю, что это лучшее решение, как минимум размер SQL кода меня смущает.
Хотелось более быструю работу - получилось наоборот.
  • Вопрос задан
  • 499 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы