1. ホーム
  2. mysql

[解決済み】MYSQLのORとINの性能比較

2022-04-14 18:26:38

質問

以下のような性能の違いがあるのでしょうか?

SELECT ... FROM ... WHERE someFIELD IN(1,2,3,4)

SELECT ... FROM ... WHERE someFIELD between  0 AND 5

SELECT ... FROM ... WHERE someFIELD = 1 OR someFIELD = 2 OR someFIELD = 3 ... 

それとも、コンパイラがコードを最適化するのと同じように、MySQL が SQL を最適化するのでしょうか?

EDIT: ANDOR は、コメントにあるような理由からです。

解決方法は?

回答された内容では、その理由が説明できません。

以下、『ハイパフォーマンスMySQL 第3版』から引用します。

<ブロッククオート

多くのデータベースサーバーでは、IN()は複数のOR句の同義語に過ぎず、この2つは論理的に同等であるためです。MySQL ではそうではなく、IN() リストの値をソートし、値がリスト内にあるかどうかを確認するために高速バイナリ検索を使用します。これはリストのサイズに対して O(Log n) であるのに対し、同等の一連の OR 節はリストのサイズに対して O(n) です(つまり、大きなリストではかなり遅いのです)。