sql >> データベース >  >> RDS >> Mysql

MySQLまたはSQL全般のINとINの間にパフォーマンスの違いはありますか?

    BETWEEN すべき INよりも優れています この場合(ただし、実行 実行計画も測定して確認してください!)、特にnとして 成長し、統計がまだ正確であるように。仮定しましょう:

    • m テーブルのサイズです
    • n 範囲のサイズです

    インデックスを使用できます(n mに比べて小さいです )

    • 理論的には、BETWEEN 主キーインデックスで単一の「範囲スキャン」(Oracleスピーク)を使用して実装し、最大でnをトラバースできます。 インデックスリーフノード。複雑さはO(n + log m)になります

    • IN 通常、一連のnとして実装されます 主キーインデックスの「範囲スキャン」。 mを使用 テーブルのサイズであるため、複雑さは常にO(n * log m)になります。 ...これは常に悪いことです(非常に小さなテーブルの場合は無視できますm または非常に狭い範囲n

    インデックスは使用できません(n mの重要な部分です )

    いずれの場合も、全表スキャンを取得して、各行の述語を評価します。

    • BETWEEN 2つの述語を評価する必要があります。1つは下限用、もう1つは上限用です。複雑さはO(m)です

    • IN 最大でnを評価する必要があります 述語。複雑さはO(m * n)です。 ...これも常に悪い、またはおそらくO(m) データベースがINを最適化できるかどうか 述語のリストではなく、ハッシュマップになるようにリストします。



    1. mysqlデータベースに接続し、Androidコードを使用してデータを挿入するにはどうすればよいですか?

    2. MySQL:ロック待機タイムアウトを超えました

    3. 開始文字の範囲で選択するにはどうすればよいですか?

    4. group byを組み合わせて、mysqlをカウントします