MYSQLのチューニングやってみた


確認の仕方


1,PHPMyAdminでWHERE句のあるSQLを実行

2,[EXPLAIN で確認]をクリック

3,Extraを見てみる
 Using filesort か using temporaryが書かれているとダメ

らしいです。


INDEXをつけると、WHEREの検索がものすごく早くなるらしいです


引用:http://www.res-system.com/weblog/item/550

インデックスは、カラムが特定の値をもつレコードの迅速な検索に使用されます。
インデックスがないと、MySQLがレコードを見つけるために、最初のレコードから開始し、テーブル全体を読み取るとが必要になります。
テーブルが大きくなると、これにコストがかかります。
クエリ対象のカラムにインデックスがあると、MySQLは全てのデータを探すことなく、データファイルの途中にあるシーク対象ポジションを迅速に取得することができます。
テーブルに1000 レコードある場合、シーケンシャルに読み取る場合と比較して少なくとも100倍は高速化できます。1000レコードのほとんどすべてにアクセスする必要がある場合は、ディスクシークが最小になるため、シーケンシャルに読むほうが速くなることに注意してください。


そういうのを、チューニングというようです。



INDEXの付け方


INDEXはSQLのwhere句で記述されている順番で作ります

PHPMyAdminでは、
サーバ→データベース→テーブル→操作→詳細 INDEX作れます。

INDEXは複数設定できますが、1つのクエリに1つのINDEXしか使用できないようです
複数のINDEXから最適なINDEXを探して、勝手にやってくれるようです。

決まり事とかもあって

1,area 2,states 3,shop1 4,shop2
という順番でINDEXを作成した場合、

1,area 2,states 3,shop1 4,shop2

1,area 2,states 3,shop1

1,area 2,states

1,area

の四通りの組み合わせしか使えない

ということらしいです。


参考リンク:http://dev.mysql.com/doc/refman/5.1/ja/mysql-indexes.html
注:インデックスが(col1, col2, col3)に存在する場合、最初のクエリだけがインデックスを使用できます。
と書いてありますが、最初から二つがインデックスを使用できる、の間違いのようです。


他に、数字に置き換えられるカラムは置き換える