MySQLコマンドやSQL文に関する各種メモ書き

MySQLの検索を高速にするインデックスの作成

● テーブルに貼られているインデックスを表示するには

show index from 【テーブル名】;

● インデックスを作成するには

alter table 【テーブル名】 add index 【インデックス名】 (【フィールド名】);


テーブル「item_dt」
対象カラム「item_name」
に インデックス名「item_name_idx」 のインデックスを作成します。

ALTER TABLE item_dt ADD INDEX item_name_idx(item_name);

● TEXT型のカラムにインデックスを作成するには

TEXT型のように可変長テキストにインデックスを作成するには長さを指定します。 例(先頭255バイトまでのテキストにインデックスを貼る)

ALTER TABLE item_dt ADD INDEX item_name_idx(item_name(255));

● インデックスを削除するには

DROP INDEX 【インデックス名】 ON 【テーブル名】;

● EXPLAIN 構文を使ってクエリの実行方法を調査する

EXPLAIN 【調査したいselect文】

表示されるデータの見方

【row】:テーブル読まれた行の数 (少ない方が良い。インデックス作成で激減する)
【type】:次の順番で早い順となる
・system, const(結果が単一行)
	・eq_ref(UNIQUE or PRIMARY index使用)
	・ref (index使用の単一パス検索)
	・range ( indexの範囲検索)
	・index(index全体をスキャン)
	・ALL (全DBデータを検索)

● mysqlクエリーを少しでも早くするには

  • SELECT * をやめて必要なカラムだけを取得する(これだけで全然速さが違います。)
  • 適切なインデックスをはる(どう貼っていいかわからない時は、全てのカラムにインデックスを貼って EXPLAIN する手もあります。)
  • 文字列後方一致検索をやめる
  • テンポラリテーブルを使ったほうが早いか検討する。

関連エントリー

No.176
07/11 13:24

edit

高速化