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文を実行するよりも効率が高くなります。
Ⅸ、データ型の同期
同じ情報を扱うカラムが複数のテーブルにある場合、同じ名前、同じ型にする。