作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的网站中有一个查询造成了速度瓶颈。一位经验丰富的 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)
上的索引最适合此版本的查询。
关于php - 左连接 | ORDER BY查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31492180/
我是一名优秀的程序员,十分优秀!