6.MySQL最適化索引連結最適化

3446 ワード

紹介する
インデックスマージ・アクセス・メソッドは、複数の範囲スキャンを持つローを取得し、その結果をマージします.このアクセス・メソッドは、複数のスキャン・テーブルにまたがるのではなく、単一のテーブルからのインデックス・スキャンのみをマージします.マージは、ベーススキャンの結合、交差、または交差の結合を生成します.
次に例を挙げて使用方法を説明します.
SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;
SELECT * FROM tbl_name
WHERE (key1 = 10 OR key2 = 20) AND non_key = 30;
SELECT * FROM t1, t2
WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE 'value%')
AND t2.key1 = t1.some_col;
SELECT * FROM t1, t2
WHERE t1.key1 = 1
AND (t2.key1 = t1.some_col OR t2.key2 = t1.some_col2);

インデックス集計最適化アルゴリズムには、次の既知の制限があります.
  • 深いAND/ORネストされた複雑なWHERE句を持つクエリMySQLが最適なプランを選択していない場合は、次のID変換を使用します.
      (x AND y) OR z => (x OR z) AND (y OR z)
      (x OR y) AND z => (x AND z) OR (y AND z)
    
  • インデックスのマージは、全文インデックスには適用されません.

  • EXPLAIN出力では、インデックスマージ方法がタイプ列にindex_と表示されます.merge. この場合、キー列には使用するインデックスリスト、key_が含まれます.lenには、最長キーのリストのインデックスの部分が含まれています.
    Index Mergeアクセスメソッドには、EXPLAIN出力のExtraフィールドに表示されるアルゴリズムがいくつかあります.
  • Using intersect(…)
  • Using union(…)
  • Using sort_union(…)

  • 以下のセクションでは、これらのアルゴリズムをより詳細に説明します.オプティマイザは、使用可能なさまざまなオプションのコスト推定に基づいて、異なる可能性のあるインデックス集計アルゴリズムと他のアクセスメソッドの間で選択します.
  • Index Merge Intersection Access Algorithm
  • Index Merge Union Access Algorithm
  • Index Merge Sort-Union Access Algorithm
  • Influencing Index Merge Optimization

  • 1 Index Merge Intersection Access Algorithm
  • WHERE句がANDと組み合わせた異なるキー上で複数の範囲条件に変換する場合、このアクセスアルゴリズムは適用され、各条件は以下のいずれかである:
      key_part1 = const1 AND key_part2 = const2 ... AND key_partN = constN
    
  • .
  • InnoDBテーブルのプライマリ・キーの範囲条件.

  • 例:
    SELECT * FROM innodb_table
    WHERE primary_key < 10 AND key_col1 = 20;
    SELECT * FROM tbl_name
    WHERE key1_part1 = 1 AND key1_part2 = 2 AND key2 = 2;
    

    Index Merge Intersection Access Algorithmとは、使用するすべてのインデックスを同時にスキャンし、マージインデックススキャンから受信したロー・シーケンスの交差を生成することを意味します.
    インデックスをスキャンするときにインデックスセットをマージしてデータを取得する数を減らします.
    2 Index Merge Union Access Algorithm
    このアルゴリズムの標準はIndex Merge Intersection Access Algorithmの標準と類似している.このアルゴリズムは,表のWHERE句がORと結合した異なるキー上で複数の範囲条件に変換される場合に適用される.
  • この形式のN部分式は、インデックスがちょうどN個の部分(すなわち、すべてのインデックス部分が上書きされる)を有し、各条件は以下のいずれかである:
      key_part1 = const1 AND key_part2 = const2 ... AND key_partN = constN
    
  • InnoDBテーブルのプライマリ・キーの範囲条件.

  • 例:
    SELECT * FROM t1
    WHERE key1 = 1 OR key2 = 2 OR key3 = 3;
    SELECT * FROM innodb_table
    WHERE (key1 = 1 AND key2 = 2)
    OR (key3 = 'foo' AND key4 = 'bar') AND key5 = 5;
    

    3 Index Merge Sort-Union Access Algorithm
    WHERE句がOR組合せの複数の範囲条件に変換される場合、このアクセスアルゴリズムは適用されるが、Index Merge union algorithmメソッドは適用されない
    例:
    SELECT * FROM tbl_name
    WHERE key_col1 < 10 OR key_col2 < 20;
    SELECT * FROM tbl_name
    WHERE (key_col1 > 10 OR key_col2 = 20) AND nonkey_col = 30;
    

    sort-unionアルゴリズムとunionアルゴリズムの違いは、sort-unionアルゴリズムが最初にすべてのローのローIDを取得し、任意のローを返す前にソートする必要があることです.
    4 Influencing Index Merge Optimization
    インデックスマージの使用はoptimizer_によって異なります.switchシステム変数のindex_merge,index_merge_intersection,index_merge_unionとindex_merge_sort_Unionフラグの値.デフォルトでは、これらのフラグはすべてオンになっています.いくつかのアルゴリズムのみを有効にするにはindex_mergeはoffに設定され、許可すべき他のアルゴリズムのみが有効になります.
    optimizerを使用する以外はswitchシステム変数は、セッション範囲内のインデックスマージアルゴリズムのオプティマイザの使用を制御するために使用されるほか、MySQLはオプティマイザのヒントをサポートし、永続化に基づいてオプティマイザに影響を与える.