[mysql]なぜかindexが使われない、、、クォーテーションで囲っている?
2017/06/06
whereの対象列にindexを張っている。
しかし、検索時にやたら重いことがあった。
explainをみたら、indexが使われてない模様。
たまたま、シングルコーテーション「’」をつけたら、早くなった…explainを付けるとインデックスが使われている。
どうやら、項目がvarcharの場合は、文字列として認識させるため囲ってあげないとインデックスが活躍しない模様。
下記でも同じこと書いている。
しらなかった—–
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
--------囲い文字無し mysql> explain SELECT name -> FROM sample_table -> WHERE name = 000279 -> -> ; +----+-------------+----------------+------+----------------+------+---------+------+--------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------------+------+----------------+------+---------+------+--------+-------------+ | 1 | SIMPLE | sample_table | ALL | idx_name | NULL | NULL | NULL | 532108 | Using where | +----+-------------+----------------+------+----------------+------+---------+------+--------+-------------+ 1 row in set (0.00 sec) -------囲い文字あり mysql> explain SELECT name -> FROM sample_table -> WHERE name = '000279' -> ; +----+-------------+----------------+------+----------------+----------------+---------+-------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------------+------+----------------+----------------+---------+-------+------+-------------+ | 1 | SIMPLE | sample_table | ref | idx_name | idx_name | 21 | const | 5 | Using where | +----+-------------+----------------+------+----------------+----------------+---------+-------+------+-------------+ 1 row in set (0.00 sec) |
[補足]EXplainの見方
http://nippondanji.blogspot.jp/2009/03/mysqlexplain.html
select_type = simple (joinやunion等なし)
select_type = 利用可能なインデックスの候補として挙げたキーの一覧。
key = 実際に利用されたインデックス
key_len=keyの長さ (キー項目は短いほうが高速)
ref = keyで参照している項目(定数が指定されている場合はconst)
rows = テーブルからフェッチされる行数の見積もり
Extra = そのクエリを実行するためにオプティマイザがどのような戦略を選択したかということを示すフィールドである。
パターン
Using where
WHERE句に検索条件が指定されており、なおかつインデックスを見ただけではWHERE句の条件を全て適用することが出来ない場合に表示される。
Using index・・・クエリがインデックスだけを用いて解決できることを示す。Covering Indexを利用している場合などに表示される。
などなど
下記も参照。
http://qiita.com/Tsuji_Taku50/items/43eb2a41915d03173773
関連記事
-
-
[sql][mysql]URLのパラーメータ削除 + index.html の 削除
よく忘れるのでメモ。 ログを集計するときに、パラメータを削除したり、URLの/と …
-
-
[sql][mysql]特定グループ毎に最大の値を持つ行を取得する(相関サブクエリー、JOIN)
標題のとおり ぱっと考えるとMAX()でとればいいように思えるが、GROUP B …
-
-
[mysql]どういうSQL文のとき、どういうインデックスが使われるのか整理
mysqlのチューニングをしていて、どうしてもインデックスが、どの指定の時に何が …
-
-
mysql 内部結合・外部結合違い inner join,left join,right join
参考サイト]http://mathemathiko.hatenablog.com …
-
-
【MySQL】query_logを取得した場合の速度影響
あくまでWEB画面表示について。 環境は下記。 Linux CentOs7.1 …