mysqlでのqueryのチューニング

Ⅰ、権限の簡易化


 テーブルの権限が複雑になればなるほど、オーバーヘッドが大きくなります。GRANT文で設定された権限が単純であれば、クライアントがSQLを実行したときのオーバーヘッドが少なくなります。


Ⅱ、MySQL関数をBENCHMARK関数でテストする


特定のMySQL関数などが問題になっている可能性がある場合、BENCHMARK関数を使用してmysqlクライアントから実行時間を調べることができます。実際にこのBENCHMARKが有用となるのは、複雑な関数を実行したりしている場合のオーバーヘッドを調べるときなどが考えられます。
BENCHMARK関数


Ⅲ、WHERE句の最適化


・不要な括弧「()」は除く
・単一のテーブルにWHERE句なしのCOUNT(*)を実行すると、MyISAMとMEMORYテーブルではテーブル情報から直接取得することができます。また、テーブル1つのみで使用する場合はすべてのNOT NULL式でも実行されます。
SQL_SMALL_RESULTオプションを使用すると、MySQLはメモリ内のテンプテーブルを使用します。
WHERE句の最適化


Ⅳ、OPTIMIZE TABLEの実行


テーブルをデフラグします。大量のデータを削除した場合などに実行すると効果があるでしょう。


Ⅴ、可変長カラム型


頻繁に更新されるMyISAMテーブルでは、可変長カラム型(VARCHAR, BLOG, TEXT)は使用するべきではありません。
可変長カラム型を使用した動的テーブル


Ⅵ、INSERT DELAYED構文


INSERT DELAYED構文はデータの書き込み終了を検知する必要がない場合に使用します。そうすることで、一度のディスク書き込みで多くの行を書き込むことができるので、インサートのオーバーヘッドを少なくすることができます。

MyISAMでは同時SELECTと同時INSERTが可能であるため、MyISAMでは使用する必要はほとんどないとのことです。〜


Ⅶ、優先度の指定


・INSERT LOW_PRIORITY構文を使用すると、INSERT文の優先度が下がり、相対的に他のSELECT文の優先されるようになります。
・SELECT HIGH_PRIORITY構文を使用すると、キューに優先度が指定されていないSQL文があっても、先にそのSELECT文が実行されます


Ⅷ、複数行の同時インサート


複数行を同時にINSERTする方が、複数回のINSERT文を実行するよりも効率が高くなります。


Ⅸ、データ型の同期


同じ情報を扱うカラムが複数のテーブルにある場合、同じ名前、同じ型にする。


DBの構築について
DBのチューニング


MySQLのクエリを最適化する10のTips