Запрос Laravel Eloquent выполняется так МЕДЛЕННО по сравнению с аналогом MySQLPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Запрос Laravel Eloquent выполняется так МЕДЛЕННО по сравнению с аналогом MySQL

Сообщение Anonymous »

Почему этот красноречивый запрос laravel выполняется так МЕДЛЕННО?
У меня есть запрос, выполняющийся в задании Laravel, который выполняется очень медленно и непоследовательно. Иногда получение результата занимает 1–2 минуты, а иногда для того же самого запроса требуется всего 1–2 секунды.
Медленный полный красноречивый запрос (Выполнение запроса занимает 1–2 минуты)

Код: Выделить всё

$relevantRobot = App\Robot::where('serial_number', 'TEST-ID')
->whereHas('robot_maps', function($query) use ($robot_map_name) {
$query->where('name', $robot_map_name);
})
->with(['robot_maps' => function($query) use ($robot_map_name) {
$query->where('name', $robot_map_name);
},
'current_robot_position',
'current_robot_position.robot_map',
'latest_robot_deployment_information_request'
])
->first(); // Get the raw SQL query
Медленный сокращенный красноречивый запрос (Выполнение запроса занимает 1–2 минуты)< /p>

Код: Выделить всё

$relevantRobot = App\Robot::where('serial_number', 'TEST-ID')
->whereHas('robot_maps', function($query) use ($robot_map_name) {
$query->where('name', $robot_map_name);
})
->with(
'current_robot_position',
])
->first(); // Get the raw SQL query
Быстрый сокращенный красноречивый запрос (Выполняется менее чем за секунду)

Код: Выделить всё

$relevantRobot = App\Robot::where('serial_number', 'TEST-ID')
->whereHas('robot_maps', function($query) use ($robot_map_name) {
$query->where('name', $robot_map_name);
})
->with(
'latest_robot_deployment_information_request',
])
->first(); // Get the raw SQL query
SQL-запрос ( Выполняется менее чем за секунду )

Код: Выделить всё

select * from `robots` where `serial_number` = 'TEST-ID' and exists (select * from `robot_maps` where `robots`.`id` = `robot_maps`.`robot_id` and `name` = 'test' and `active` = 1);
Красноречивое общение

Код: Выделить всё

 public function current_robot_position(){
return $this->hasOne('App\RobotMapPositionLog','robot_id','id')
->orderBy('id','desc');
}
Попытка решения
Заметив медленную загрузку при активной загрузке current_robot_position, я добавлены индексы к столбцам, используемым в этом отношении (id). Однако это не улучшило производительность.
Я также попробовал преобразовать запрос Eloquent в необработанный запрос MySQL с помощью toSql(), и он работал очень быстро (менее 1 секунды).< /p>
Что не так? Чего мне не хватает?
ОБНОВЛЕНИЕ
Я определил ->with('current_robot_position') как проблему, которая медленно распространяется по всему запросу.
Как предлагали некоторые другие, я создал внешний ключ столбец (robot_id) столбец, используемый в отношении столбца индекса, а также измененный orderBy с помощью late(), но ни то, ни другое не помогло значительно сократить время загрузки

Подробнее здесь: https://stackoverflow.com/questions/791 ... ounterpart
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»