Один запрос: 4 мс с литералами и 3 секунды из Laravel. Как плейсхолдеры в IN выключают loose index scan в MySQL

habrahabr.ru · world
Full story

A server-management panel stores metrics in a table called server_metrics. In October the table held 2.26 million rows, and production pages listing servers took several seconds to open. One query was identified as the cause. With values inserted directly, it ran in 4–8 ms; with bindings as the application sent it, it took 2.3–3.3 seconds. The slowdown is tied to placeholders in an IN clause disabling a loose index scan in MySQL.

Наша панель для управления серверами хранит метрики в таблице server_metrics . В октябре в ней было 2,26 млн строк, и на проде страницы со списком серверов открывались по несколько секунд. Виноватым оказался один запрос. С подставленными значениями он выполнялся за 4-8 мс, а с биндингами, как его отправляет приложение, за 2,3-3,3 секунды. Читать далее

Read full article → Compare