mysql - SQL 最適化の問題、in よりも between の方が優れていますか?
phpcn_u1582
phpcn_u1582 2017-05-18 10:56:50
0
4
828

インターネット上の情報を見て、こう言いました:

リーリー
phpcn_u1582
phpcn_u1582

全員に返信(4)
阿神

連続値はもちろん間にあり、解析が軽減され、inの範囲が一定の数を超えると、デフォルトでテーブル全体が削除され、9以上かそれ以下は忘れられます

以下のコメントに対する追加の回答:
完全なリストでは、それは状況によって異なります。上の回答は、階下の友人の方が深刻です。ここでもう一度説明します。数字ですが、25%~35%くらいです。私のレベルでは限界があるので、ソースコードを読まないと確認できません。また、約 30 という比率は、テーブル全体のスキャンを実行する必要があるという意味ではありません。mysql にはインデックス スキャンもあります。つまり、選択したコンテンツがインデックス内で見つかった場合、もちろんテーブル全体をスキャンするわけではありません。次の例では、select id from ttt where id in (..); と select * from ttt where id in (...); をすべて入力した場合でも、前のものは間違いなく主キー スキャンです。 ID 値、それは依然として主キー スキャンになります。詳細については、以下の例を参照してください。その後、状況についてもお話したいと思います。なぜそれが良いのですか?あるデータを取得するときに、その近くのデータも非常に大きい確率アルゴリズムが使用されるため、このとき、多重アドレスを避けるために、冗長なデータが一度に取り出される状況が発生します。 between の間の連続値を使用するのが適しています
リーリー

いいねを押す +0
阿神

データベース内のB-treeインデックスの格納構造に従って、データを指す物理アドレスがリーフノードに格納され、クラスター化インデックスがある場合、この物理アドレスが順序付けされます。

リーリー
いいねを押す +0
洪涛

EXPLAIN mysql 语句 出力を見てみましょう

いいねを押す +0
淡淡烟草味

between を使用する場合は、上限と下限を一致させるだけでよいため、各入力を再度読み取る必要があり、テーブル全体のスキャンが発生します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート