Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对多INs优化mysql子查询_Mysql_Sql_Subquery_Inner Join - Fatal编程技术网

针对多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仍然是必要的。结果的第一页只有一个结果,因此我得到了错误的印象。