LEFT JOIN | ORDER BY查询速度

时间:2015-07-18 14:30:12

标签: php mysql

我的网站上有一个查询,它会造成速度瓶颈。一位经验丰富的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倍[...而且这里我不记得究竟是什么解释了]。

任何人都可以从速度优化的角度看出这有什么问题,并解释它以及优化它的原因吗?

非常感谢!

1 个答案:

答案 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)上的索引对于此版本的查询而言是最佳的。