У меня есть запрос на моем сайте, который создает узкое место в скорости. Опытный разработчик PHP/MySql посмотрел на запрос и сразу увидел проблему, немного объяснил, как она должна быть оптимально структурирована, а затем (как это бывает со многими веб-разработчиками, к сожалению) быстро исчезла.LEFT JOIN | ORDER BY query speed
Вот проблемный вопрос:
SELECT DISTINCT a.id, a.title, a.thumb_image
FROM artwork a
LEFT JOIN galleries_artwork ga
ON a.id = ga.artwork_id
WHERE ga.galleries_id = $gallery_id
ORDER BY ga.position
Он сказал, что запрос был сортировки результирующего набора в пути, который занимает 3 раза больше, чем если бы она была переписана, чтобы положить в начале [... и вот где я не могу точно помнить, что он объяснил].
Может ли кто-нибудь увидеть, что с этим не так, с точки зрения оптимизации скорости, и объяснить, и что бы оптимизировать его?
Большое спасибо!
Ваш предлагаемый пересмотр действительно ускоряет его; разработчик MIA обсуждал что-то о размещении элементов запроса в круглых скобках, как вы предлагаете дальше. Но это означало бы это: ВЫБЕРИТЕ A.id, a.title, a.thumb_image из художественных изображений (идентификатор, название, thumb_image) объединение galleries_artwork (galleries_id, положение, artwork_id) га ON A.id = га. artwork_id WHERE ga.galleries_id = $ gallery_id ORDER BY ga.position ? – Tom
@Tom. , , Я не думаю, что это повлияет на производительность. –
Спасибо, Гордон ... Я неправильно понял вторую часть вашего предложения. Я проверил базу данных, и не все индексы, которые вы указали, были проиндексированы; Я проиндексировал их, и теперь поиск должен работать, как вы предложили. – Tom