针对多INs优化mysql子查询
需要帮助加速此查询。当针对多INs优化mysql子查询,mysql,sql,subquery,inner-join,Mysql,Sql,Subquery,Inner Join,需要帮助加速此查询。当p.article in('200101')中只有一篇文章时,查询运行时间为0.0006秒。如果两篇文章位于p.article in('200101','200102')中,则查询运行时间为0.6414秒 因为我需要在大约3000个项目上运行这个查询,所以我想加快一点速度。我认为解决方案是内部联接,但我自己还没有弄明白 SELECT p.article, ( SELECT s.final_item FROM `structure` s WHERE
p.article in('200101')
中只有一篇文章时,查询运行时间为0.0006秒。如果两篇文章位于p.article in('200101','200102')
中,则查询运行时间为0.6414秒
因为我需要在大约3000个项目上运行这个查询,所以我想加快一点速度。我认为解决方案是内部联接,但我自己还没有弄明白
SELECT p.article, (
SELECT s.final_item
FROM `structure` s
WHERE s.item = p.article
ORDER BY s.level DESC
LIMIT 1
) AS final_item
FROM products p
WHERE p.article IN ('200101','200102')
首先,您应该为表产品中的项目和表结构中的项目设置索引 如果给定产品的结构中始终至少有一行,可以尝试一下:
SELECT s.final_item, p.article
FROM `structure` s INNER JOIN products p ON s.item = p.article
WHERE s.article IN ('200101','200102')
ORDER BY s.level DESC
LIMIT 1
您是否在
structure.item
上有索引?为什么需要运行查询3000次?如果给定的查询是查询1,那么查询2会是什么样子?谢谢。限制1现在已经过时了,但是其余的代码帮助我解决了这个问题。不客气,但是。。。为什么现在限制1已过时?我认为您需要检索给定产品的itmes结构中最深的节点。如果没有,可能有更好的编码方法。另外,重要的是要知道是否保证产品中的每个文章在结构上至少有一个匹配行。你是对的。限制1仍然是必要的。结果的第一页只有一个结果,因此我得到了错误的印象。