如何使静态嵌套SELECT更快

时间:2010-09-01 17:13:00

标签: mysql

我有一个与此类似的查询

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..
..

来自SELECT的嵌套LEFT JOIN静态,我的意思是返回的结果不受外部值的影响。这两个SELECT使用数据库中的数据并计算结果。当某些用户对产品进行审核时,这些查询的结果很少发生变化。

问题是这些SELECT需要花费很多时间才能完成,它们会遍历各自表格的每一行。

有没有办法可以通过将其转换为几个较小的查询来加快查询速度?或以某种方式缓存嵌套选择?

2 个答案:

答案 0 :(得分:1)

我同意没有更多信息就很难回答。不过,请查看此帖子:http://www.xaprb.com/blog/2006/04/30/how-to-optimize-subqueries-and-joins-in-mysql。我发现它在过去非常有帮助。

如果查看最后一段,您将看到一种将嵌套选择的结果保存在临时表中的技术。

答案 1 :(得分:0)

您可能希望在子选择语句中使用的表中添加一些索引,正确索引数据库应该能够立即返回数百万行的结果集。