WEBアプリケーションでSQLの発行数について、

みなさん大体1ページ表示させるのにこのぐらいに抑えたいとかありますか?

一度にデータを取るか(SQLの発行数は小、データ量は大)、分けてとるか(SQLの発行数は大、データ量は小)でどちらにしようか悩んでます。

今は分けて取得しており、スピードは問題ありませんがSQLの発行数がちょっと多くて気になってます。

どちらにしたほうがいいですか?
(データ数とかによっても変わると思いますが、その辺も含めてお答えいただければ・・・)

回答の条件
  • 1人2回まで
  • 登録:2008/05/23 13:34:23
  • 終了:2008/05/28 09:29:16

回答(2件)

id:tomo_k No.1

tomo_k回答回数426ベストアンサー獲得回数262008/05/23 18:36:59

ポイント70pt

経験上は可能な限り一つのSQLにまとめてしまった方が速いですね。

アプリケーション側がマルチスレッドでもない限りアプリケーションサーバがSQLを発行→DBサーバが応答→それを受けてアプリケーションサーバが次のSQLを発行というのを繰り返すわけですから、そのたびにアプリケーションサーバとDBサーバとの間で通信が発生します。

1つのSQLにまとめられれば通信は1度ですむはずで、少々SQLが複雑になろうともDBサーバのSQL解析処理および実行と通信とでは通信の方が遅いと思われます。

自分の場合ならサブクエリーが2重3重になろうとも1つのSQLにまとめ上げる努力をします。(もっともその場合はたいてい要件がよくないのだが……)

その上で、リーダーなりDBに詳しいメンバーに判断を仰ぎSQLが複雑すぎて後々のメンテに支障を来すから分解した方がいいのか1つのSQLの方がパフォーマンスがよいのでそのままにするのかを検討します。

コメント欄3の方法でやる場合は少なくともプリペアドステートメントを使った方法にすべきですね。同じSQLを発行する場合はその方が速いので。

ただ、データの数が多くなってくるにつれSQLの発行回数が多くなるというパターンは絶対に避けた方がいいでしょう。

実運用で問題になる可能性が高いので。

id:pirokyun

SQLで少しずつとってくるより、一気にとって来てプログラム側で処理したほうがやっぱりいいてことですね~。

作り直してみます!!

ありがとうございます!!

2008/05/25 01:51:22
id:redwing1 No.2

redwing1回答回数541ベストアンサー獲得回数32008/05/26 01:12:53

いみわからん

id:pirokyun

ん~、1.2.のように一気にとってくるとプログラム側でちょっと処理をいれなくちゃいけなくて、

3.のようにちょっとずつとってくればその中の処理が一部楽になるのです。

なので3.で組んだんだけど、表示速度は特に遅くはないけど、やっぱSQLを何回も発行するのはよくないよね~。

何回くらいなら許容範囲なんだろ~っと思った次第です。



>普通は取得するデータ量は要件で決まっているものだと思うが?

っとb-windさんはコメントしてくれているんですけど、そもそも要件の時点でSQLたくさん発行しなくちゃいけないのなら、それは設計をやり直したほうがいいのではないかとか。

っでその分かれ目はどのくらいなのかなっっと・・・。

こんなこと思うこと自体おかしいんですかねorz

2008/05/26 01:45:46
  • id:b-wind
    質問の意図がよくわからない。
    普通は取得するデータ量は要件で決まっているものだと思うが?
    あとはどうやれば効率がよいかだけの問題。
  • id:pirokyun
    簡単な例(PHP)ですが、

    1.
    foreach ($users as $user) {
    $_user[] = $user['user_id']
    }
    $sql = "select * from users where user_id in (" . implode(',', $_user) . ")";
    // sql実行

    2.
    $sql = "select * from users;
    // sql実行


    3.
    foreach ($users as $user) {
    $sql = "select * from users where user_id = " . $uesr['user_id'];
    // sql実行
    }
    // userごとに分ける処理不要

    くらい取得方法はあると思いますが、

    1.だとinやorで何十個も条件をつけるのが気持ちわるい。
    2.だと不必要なデータまで取ってきて効率悪い。
    3.1ページで何十回もSQL発行するのはどうかと思う。

    で、結局どれにするばいいのかわからないのです・・・。
    で、とりあえず、今は3.で作っちゃってるので、SQL発行数は大体どのくらいまでにしたほうがいいとか、あれば教えてほしいです。

    スピードに問題なければ多くても問題ないのでしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません