LEFT JOIN | ORDER BY查询速度


LEFT JOIN | ORDER BY query speed

我有一个查询在我的网站,正在创建一个速度瓶颈。一个有经验的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倍的时间,如果它被重写,放在开始[…]我不太记得他是怎么解释的了。

有没有人能从速度优化的角度看出这有什么问题,并解释一下,如何优化它?

多谢!

distinct是一个主要问题。此外,由于where子句,您正在将left join转换为inner join,因此这可能是您想要的:

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)上的索引对于这个版本的查询是最优的。