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