初心者のためのSQLチューニング

投稿者:chikunai 投稿日時:2010-06-06(日) 17:08

昨今は、システム構築にデータベースは欠かせない存在です。データベース RDBMSが使われない事案が無いほど普及しています。

そんな中、期待したパフォーマンスが出ない原因、ボトルネックに、データベースに問題があることが多いです。

なぜプログラマーはデータベースに歩み寄れないのか?

SQLはできるけど、、、データベースには疎い初心者プログラマー、開発に向けて、簡単なチェックリストを作ってみました。

SQL毎の実行時間を調べ、遅いSQLについては以下を確認します。

  • テーブル結合している列に、索引はついているか? ついていない場合は索引を作成する。
  • 条件(WHERE句)に使っている列に、索引はついているか? ついていない場合は索引を作成する。
  • 並び替え(ORDER BY句)に使っている列に、索引はついているか? ついていない場合は索引を作成する。
  • 条件(WHERE句)に使っている列に、関数や計算式を使っていないか? 使っている場合は使わない回避策を考える。
  • ただし、テーブルに索引をつけすぎていないか? 多いとINSERT、UPDATEのパフォーマンスが悪化します。
  • ただし、索引をつけるその列のカーディナリティは高いか? 例えば0と1しか入っていない列に索引をつけるのは無意味。

それでも効果が期待できない、効果が無いときは、仕様にまで踏み込みます。

  • 索引がついている列を使って、新に条件がつけられないか? 例えば期間を絞れないか? 1年でいいんじゃね?
  • 件数が絞れないか? MySQLならLIMITで。DB2ならFETCH FIRST 10 ROWS ONLY。

ぜひ、試してみてください。

そうだ、一つ忘れていたので追記。

  • Prepared Statementを使おう。データベースはコンパイルしたSQLをキャッシュしてくれます。Prepared Statementを使うと、私の知っているDBMSはキャッシュのヒット率があがります。コンパイル時間が減らせます。さらにSQLインジェクション対策にもなります。

ここで挙げたものは非常に初歩的なものです。

もっと、より詳細にチューニングしたいときは、ミックさんのホームページを読んでてみてください。

SQLを速くするぞ
http://www.geocities.jp/mickindex/database/db_optimize.html

勉強するなら、ミックさんの書籍「達人に学ぶ-SQL徹底指南書」がオススメです。




コメント(0)

新しいコメントの投稿

このフィールドの内容は非公開にされ、公表されることはありません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 使用できるHTMLタグ: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • 行と段落は自動的に折り返されます。
  • You can use BBCode tags in the text. URLs will automatically be converted to links.
  • 次のタグを使用してソースコード構文をハイライトすることができます。: <code>, <blockcode> The supported tag styles are: <foo>, [foo].
  • You may insert videos with [video:URL]

書式オプションに関するより詳しい情報...

CAPTCHA
この問題はユーザが人間であるかどうかをテストし、スパムによる自動投稿を防ぐためのものです。
Image CAPTCHA
Enter the characters shown in the image.
Drupal theme by Kiwi Themes.