“id(ids)”的表现?

时间:2011-03-20 08:34:22

标签: mysql performance

可以使用以下查询吗?性能如何?

select * from table where id not in ( 2000 or much more ids here)

我的初始测试非常快,但我想这是因为我是现在唯一使用服务器的人。

1 个答案:

答案 0 :(得分:9)

如果您有索引,它可以非常快。

然而,MySQL中有一个bug(可能在MySQL 5.5中修复),如果没有索引,它就不会很慢,而且难以置信慢。这是因为子查询可以被检测为DEPENDENT SUBQUERY(相关子查询),即使它不是。您可以通过运行EXPLAIN SELECT ...并检查子查询的key是否为NULL来查看MySQL是否使用了正确的查询计划。我已经发布了关于这个bug的另一篇文章,其中包含更多细节:

您还可以考虑重写您的查询以使用JOIN而不是IN来避免此错误。