我的网站上有一个查询,它会造成速度瓶颈。一位经验丰富的PHP / MySql开发人员查看了查询,并立即看到了问题,解释了它应该如何以最佳方式构建,然后(很多Web开发人员发生的事情,很遗憾地)很快就消失了。
以下是有问题的查询:
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倍[...而且这里我不记得究竟是什么解释了]。
任何人都可以从速度优化的角度看出这有什么问题,并解释它以及优化它的原因吗?
非常感谢!
答案 0 :(得分:2)
distinct
是一个主要问题。此外,由于left join
子句,您将inner join
变为where
,因此这可能是您想要的:
SELECT a.id, a.title, a.thumb_image
FROM artwork a JOIN
galleries_artwork ga
ON a.id = ga.artwork_id
WHERE ga.galleries_id = $gallery_id
ORDER BY ga.position
galleries_artwork(galleryies_id, position, artwork_id)
和artwork(id, title, thumb_image)
上的索引对于此版本的查询而言是最佳的。