以下快速执行:
从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编制索引。
任何想法为什么它超级慢,或挂?
答案 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
了解更多信息