この質問についてさらに調査したところ、本 High Performance MySQL(p.219) で次のことがわかりました。
... MySQL は IN リストの値をソートし、高速バイナリ検索を使用して値がリストにあるかどうかを確認します。
このアプローチは最適でO(logN)
あり、リストのサイズと同じように測定され、非常に優れたアプローチであると見なされます (たとえば、一連のOR
ステートメントに変換するのではなく)。
しかし、リストのソートが であることを無視しているように見えるので、一連のwhich is をO(NlogN)
実行するよりも悪い結果になります。
ここで私は何を誤解していますか?
明確にするために、これは、リストが別の結果セットからの巨大な結果セットである場合を対象としていますOR
O(N)
SELECT