Mysql 长子查询 "in" 问题
Mysql long subquery "in" issue
我无法理解简单 MySQL 查询中的问题。看这里,请
select SQL_NO_CACHE
ID,
post_title,
post_type
from wp_posts
where 1
and (wp_posts.ID in (select id from ...[complex subquery here]...))
这个查询 运行ning 相当长(2.5 秒),但是如果我单独 运行ning 子查询(来自 "in (.." 的子查询)它只需要 0.15 秒。子查询只返回 60 行,我认为在这种情况下整个查询必须 运行 更快。
顺便说一句,我已经尝试 运行 使用固定 ID 列表而不是子查询的整个查询,例如
select SQL_NO_CACHE
ID,
post_title,
post_type
from wp_posts
where 1
and (wp_posts.ID in
(
48393,
52796, .... 58 more numbers))
它的运行速度非常快(~1 毫秒)。
哪里有问题?为什么整个查询 运行ning 这么慢,我该如何改进它?谢谢
您的号码实际上是未编入索引的 table。
运行 您通过 explain
查询并见证了 table 扫描问题。
下面可以解释一个执行计划:
http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/
如上所述,mysql 在这种情况下不擅长优化查询。可能发生的情况是它对 wp_posts 中的每条记录执行一次子查询。通过将它们组合成一个带有连接
的查询来避免这种行为
select SQL_NO_CACHE
ID,
post_title,
post_type
from wp_posts
left join another_table on wp_posts.id = another_table.post_id
where {complex conditions from your other query}
希望这对您有所帮助
谢谢大家,我重建了一个查询并使用了 "inner join" 方式。看来没有什么好方法可以用我最初计划的想法来解决它。
我无法理解简单 MySQL 查询中的问题。看这里,请
select SQL_NO_CACHE
ID,
post_title,
post_type
from wp_posts
where 1
and (wp_posts.ID in (select id from ...[complex subquery here]...))
这个查询 运行ning 相当长(2.5 秒),但是如果我单独 运行ning 子查询(来自 "in (.." 的子查询)它只需要 0.15 秒。子查询只返回 60 行,我认为在这种情况下整个查询必须 运行 更快。
顺便说一句,我已经尝试 运行 使用固定 ID 列表而不是子查询的整个查询,例如
select SQL_NO_CACHE
ID,
post_title,
post_type
from wp_posts
where 1
and (wp_posts.ID in
(
48393,
52796, .... 58 more numbers))
它的运行速度非常快(~1 毫秒)。
哪里有问题?为什么整个查询 运行ning 这么慢,我该如何改进它?谢谢
您的号码实际上是未编入索引的 table。
运行 您通过 explain
查询并见证了 table 扫描问题。
下面可以解释一个执行计划:
http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/
如上所述,mysql 在这种情况下不擅长优化查询。可能发生的情况是它对 wp_posts 中的每条记录执行一次子查询。通过将它们组合成一个带有连接
的查询来避免这种行为select SQL_NO_CACHE
ID,
post_title,
post_type
from wp_posts
left join another_table on wp_posts.id = another_table.post_id
where {complex conditions from your other query}
希望这对您有所帮助
谢谢大家,我重建了一个查询并使用了 "inner join" 方式。看来没有什么好方法可以用我最初计划的想法来解决它。