1.テーブルの最適化
MySQLが正しいインデックスを選択しない場合、テーブルが頻繁に変更されることが原因である可能性があります。これは統計に影響します。時間が許せば(この期間中、テーブルはロックされます)、テーブルを再構築することで、この問題の解決に役立ちます。
詳細については、前の記事を参照してください:mysql最適化テーブル
2.テーブルの分析テーブルの
分析は、特にInnoDBでは時間がかかりません。分析によりインデックス統計が更新され、より適切なクエリプランの生成に役立ちます。
3.ヒントを使用する
たとえば、キーワードuse index(index-name)、force index(index-name)を使用します。
abceからc1を選択use index(idx_c1)where ...; abce force index(idx_c1)where cからc1を選択します;
4.インデックスを無視する
間違ったインデックスを使用する場合は、キーワードを使用して、選択したインデックスを無視することができます。たとえば、SQLに主キーを無視させます。
abceからidを選択しますindex(primary)を無視しますwhere ...;
5.ビジネスの論理構造を変更して、SQLステートメントを変更する
6.負のインデックスの使用
id、タイプ、年齢をabceから選択します。 ここで、タイプ= 12345および年齢> 3は 、ID + 0で並べ替えます。#このように、ID + 0は関数操作であり、IDのインデックスは使用されません。
7. SQLの構造を変更して、オプティマイザがインデックスを選択するコストが高くなると判断するようにします。
id、タイプ、年齢をabceから選択します。type = 12345で、年齢> 3の 順にIDで並べ替えます。 #修改成 select id、type、age from abce where type = 12345 and age> 3 order by id、type、age;
このようにして、オプティマイザがidでインデックスを使用することを選択するコストが高くなると考える機会があるかもしれません。それにより、別のインデックスを選択します。
(上記のidは例としてのみ使用され、必ずしも主キーの列ではありません)
8.バグである場合があります。バグを報告し、公式の修正を待ちます。