MySQLのin文とorどちらが効率的ですか?

1666 ワード

自分で衣食を豊かにする
自分でテーブルを作成し、nマルチデータを挿入し、サブテーブルはクエリーのフィールドにインデックスがなく、一意のインデックスを作成し、通常のインデックスを作成するのと比較します.身をもって経験することができる.
3つのケースに分けてテストします.それぞれ、第1のケース:inとorが存在する列がプライマリ・キーの場合です.2つ目のケース:inとorのカラムにインデックスが作成された場合.2つ目のケース:inおよびorが存在するカラムにインデックスがない場合.それぞれの場合、異なるinとorの数でテストを行います.テスト文のデータ量が4つあるので、ここではAグループ、Bグループ、Cグループ、Dグループと呼びます.Aグループは3つの値、Bグループは150の値、Cグループは300の値、Dグループは1000の値です.

テスト結果は以下の通りである:1つ目の場合,ID列がプライマリ・キーの場合,4組のテスト実行計画と同様に実行時間もほとんど変わらない.Aグループorとinの実行時間:orの実行時間:0.002 s inの実行時間:0.002 s Bグループorとinの実行時間:orの実行時間:0.004 s inの実行時間:0.004 s Cグループorとinの実行時間:orの実行時間:0.006 s inの実行時間:0.005 s Dグループorとinの実行時間:orの実行時間:0.018 s inの実行時間は,0.014 sの2つ目の場合,ID列が一般インデックスの場合,4組のテスト実行計画と同様,実行時間もほとんど変わらない.Aグループorとinの実行時間:orの実行時間:0.002 s inの実行時間:0.002 s Bグループorとinの実行時間:orの実行時間:0.006 s inの実行時間:0.005 s Cグループorとinの実行時間:orの実行時間:0.008 s inの実行時間:0.008 s Dグループorとinの実行時間:orの実行時間:0.021 s inの実行時間は,0.020 sの3つ目の場合,ID列にインデックスがない場合,4組のテスト実行計画と同様に実行時間もほとんど変わらない.Aグループorとinの実行時間:orの実行時間:5.016 s inの実行時間:5.071 s Bグループorとinの実行時間:orの実行時間:1 min 02 s inの実行時間:5.018 s Cグループorとinの実行時間:orの実行時間:1 min 55 s inの実行時間:5.018 s Dグループorとinの実行時間:orの実行時間は:6 min 17 s inの実行時間:5.057 s
 
結論:
1.inまたはorフィールドにインデックスが追加されている場合、クエリーは速く、両者のクエリー速度には違いはありません.
2.inまたはorフィールドにインデックスが追加されていない場合、接続されているフィールドが多い(1 or 2 or 3 or 4 or......).or inのクエリーよりずっと効率が悪い
 
実験2:https://stackoverflow.com/questions/782915/mysql-or-vs-in-performance彼の対比を通してもInの方が効率が高い.
MySQLではinのリストがソートされ、ソートは二分検索でリストにあるかどうかを判断します.Inの時間複雑度はO(logn)でありorの時間複雑度はO(n)であり,これはInの効率がより高いことを意味する.
公式文書の説明:https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#function_in