У меня есть приложение rails, размещенное на Mysql, есть таблица reservations с индексом, установленным в столбце rescheduled_reservation_id (обнуляемый).
В моем приложении rails есть две части для запроса резервирования с помощью полей rescheduled_reservation_id, как показано ниже:
Transit::Reservation.find_by(rescheduled_reservation_id: 25805)
и создайте следующий вывод журнала:
Transit::Reservation Load (60.3ms) SELECT `transit_reservations`.* FROM `transit_reservations` WHERE `transit_reservations`.`deleted_at` IS NULL AND `transit_reservations`.`rescheduled_reservation_id` = 25805 LIMIT 1
Однако другая часть приложения:
Transit::Reservation.where(rescheduled_reservation_id: 25805).last
с выводом журнала ниже
Transit::Reservation Load (2.3ms) SELECT `transit_reservations`.* FROM `transit_reservations` WHERE `transit_reservations`.`deleted_at` IS NULL AND `transit_reservations`.`rescheduled_reservation_id` = 25805 ORDER BY `transit_reservations`.`id` DESC LIMIT 1
Как хорошо видно первый запрос
Transit::Reservation Load (60.3ms) SELECT `transit_reservations`.* FROM `transit_reservations` WHERE `transit_reservations`.`deleted_at` IS NULL AND `transit_reservations`.`rescheduled_reservation_id` = 25805 LIMIT 1
заняло до 60 мсек, индекс, возможно, не использовался должным образом по сравнению с 2 мс в этом
Transit::Reservation Load (2.3ms) SELECT `transit_reservations`.* FROM `transit_reservations` WHERE `transit_reservations`.`deleted_at` IS NULL AND `transit_reservations`.`rescheduled_reservation_id` = 25805 ORDER BY `transit_reservations`.`id` DESC LIMIT 1
Я также пытался продолжить отладку, выполнив объяснение для обоих запросов, я получил тот же результат, т. Е. Использовался индекс rescheduled_reservation_id
Кто-нибудь сталкивался с этой проблемой? Мне интересно, может ли соединение MySQL с rails (я использую mysql2 gem) вызвать то, что сервер Mysql не выбрал правильный индекс