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

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

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

show index from 【テーブル名】;

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

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

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

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
05/12 11:30

edit

高速化