MySQLの検索が遅い、インデックスが効かないときの対処法

まずテスト用の注文テーブルとデータを用意してインデックスを作成しました。
コンソールから確認しても同じですが見やすいので今回はphpMyAdminの画面を貼ります。

MySQLIndex01

これだけデータが少ないと遅くなることはありえないですが
仮に遅くなったと仮定してそのクエリに「EXPLAIN」をつけると実行計画を確認できます。

MySQLIndex02

possible_keysの「test_order_product_no」が使用候補となったインデックスですが
keyが「NULL」となっているためインデックスは使用されませんでした。
これではデータが多いときに検索が遅くなります。

原因1. データ型が異なっているとインデックスが利かないことがある

今回のケースは以下のようにデータ型が文字列型の列に対して文字列を条件にするよう変更するとインデックスが利きます。
MySQLでは型が合ってないとインデックスを使用してくれないようです。

MySQLIndex03

しかし、上のように文字列型の列に対して数値を条件にした場合はインデックスが利かないようですが
数値型の列に対しては数値を条件にしても文字列を条件にしてもインデックスは利くようです。
文字列型の場合もどちらも対応してくれても良さそうですけどね・・

MySQLIndex04

MySQLIndex05

シェアする

  • このエントリーをはてなブックマークに追加

フォローする