如果使用子查询,则执行缓慢的MySQL,其中使用列表快速执行

时间:2014-09-11 00:11:09

标签: mysql sql where-in

以下快速执行:

  

从text_blocks中删除
  text_id in(
  7684,
  7683,
  7682,
  ...);

注意,上面的值列表很短,例如从单独的查询中检索130。表text_blocks有~7,000行。

以下执行速度非常慢:

  

从text_blocks中删除
  text_id in(从someTable中选择a_text_id)   其中名称如“%_SomeSuffix”);

示例2中的子查询与用于获取示例1中的130的列表的子查询相同。不对text_id或a_text_id编制索引。

任何想法为什么它超级慢,或挂?

1 个答案:

答案 0 :(得分:2)

MySQL因查询/子查询(如

)的性能非常差而臭名昭着
select ...from ... where ... in (select ....);

尝试使用EXISTS代替IN,您应该会看到显着的改进。参见

http://dev.mysql.com/doc/refman/5.0/en/subquery-optimization-with-exists.html
http://stackoverflow.com/questions/6135376/mysql-select-where-field-in-subquery-extremely-slow-why

了解更多信息