进一步研究这个问题,我在《高性能 MySQL》(第 219 页)一书中发现了以下内容:
... MySQL 对 IN 列表中的值进行排序,并使用快速二进制搜索来查看值是否在列表中。
它认为这种方法是最优的,以列表的大小来衡量,O(logN)
并且它是一种非常好的方法(而不是例如转换为一系列OR
语句)。
但是似乎忽略了列表的排序是O(NlogN)
这样的结果比做一系列的更OR
糟糕O(N)
。
我在这里有什么误解?
需要明确的是,这是针对列表是来自另一个的巨大结果集的情况SELECT