わお!これは私が見た中で最も複雑な「インデックスマージ」です。
通常(おそらく常に )、「composite」インデックスを作成して、index-merge-intersectを置き換え、パフォーマンスを向上させることができます 。 key2
を変更します (pinned)
から (pinned, DeviceId)
へ 。このかもしれません 「交差」を取り除き、スピードアップします。
一般に、オプティマイザーは必死になってのみインデックスマージを使用します。 (これがタイトルの質問に対する答えだと思います。)クエリまたは関連する値にわずかな変更があれば、オプティマイザーはインデックスのマージなしでクエリを実行します。
一時テーブルの改善__codes
広範囲の値を使用して永続的なテーブルを作成し、Proc内でそのテーブルの値の範囲を使用することです。 MariaDBを使用している場合は、動的に構築された「シーケンス」テーブルを使用します。たとえば、「テーブル」seq_1_to_100
効果的に 番号1..100の1列のテーブル。宣言したり、入力したりする必要はありません。
他のREPEAT
を取り除くことができます コンピューティングによるループ Code
からの時間 。
LOOPs
の回避 パフォーマンス上の最大のメリットになります。
すべてを完了してください。そうすれば、他のヒントが得られるかもしれません。