我有一个与此类似的查询
FROM products AS p, ..
LEFT JOIN ( SELECT .. ) AS popularity on popularity.products_id = p.products_id
LEFT JOIN ( SELECT .. ) AS reviews on reviews.products_id = p.products_id
WHERE..
AND..
..
来自LEFT JOIN
的嵌套SELECT
是静态,我的意思是返回的结果不受外部值的影响。这两个 SELECT 使用数据库中的数据并计算结果。例如,当某些用户对产品进行评论时,这些查询的结果很少发生变化。
问题是这些SELECT
需要花费很多时间才能完成,它们会遍历各自表的每一行。
有没有办法通过将其转换为几个较小的查询来使该查询更快?或者以某种方式缓存嵌套选择?
最佳答案
我同意如果没有更多信息就很难回答。不过,请查看这篇文章:http://www.xaprb.com/blog/2006/04/30/how-to-optimize-subqueries-and-joins-in-mysql 。我过去发现它很有帮助。
如果您查看最后一段,您将看到一种将嵌套选择的结果保存在临时表中的技术。
关于mysql - 如何使静态嵌套 SELECT 更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3620506/