句で気をつけること 否定( != )と 範囲指定(< >) はインデックスが使用できない。 INやORで置き換える。 × WHERE age != 27 and age != 33 ◦ WHERE age IN (28,29,30,31,32) × WHERE age >= 28 and age <= 32 ◦ WHERE age=28 OR age=29 OR age=30 OR age=31 OR age=32 ア ラ サ ー ア ラ サ ー ア ラ サ ー ア ラ サ ー
句で気をつけること 曖昧検索時は「定数⽂字列+前⽅⼀致」のみインデックスが使用可能。 それ以外では使用できない。 ◦ WHERE emp_1 LIKE ‘⽂字列%’ ←定数⽂字列+前⽅⼀致 × WHERE emp_1 LIKE ‘%⽂字列’ ←定数⽂字列+後⽅⼀致 × WHERE emp_1 LIKE ‘%⽂字列%’ ←定数⽂字列+前⽅と後⽅⼀致 × WHERE emp_1 LIKE moji ←変数
句で気をつけること 句で気をつけること ORDER BY句とGROUP BY句で使用している項目が異なる場合はイ ンデックスが使用できない GROUP BY emp_1 ORDER BY emp_2 ◦ emp_1 × emp_2 ※EXPLAINをすると、ExtraにUsing temporaryと表示されます。 これを解決するには、サーバ変数のtmp_table_sizeのサイズを変更するな ど、設定レベルでの対応が必要になり、おススメできません><
その他 気をつけること 気をつけること 気をつけること 気をつけること あれっ、意図したインデックスが使われてなくて遅い・・・; そんなときは、 FORCE INDEXで利用するインデックスを強制指定 しましょう! FROM テーブル名 FORCE INDEX(キー名) ※MYSQLオプティマイザを無視して、指定されたインデックスを使用します。 ORDER BY や GROUP BY の解決時にインデックスを使用するかどうかには 影響しません。