DOBON.NET DOBON.NETプログラミング掲示板過去ログ

処理スピード(結合)

環境/言語:[Xp,.Net2003]
分類:[.NET]

初心者な私に教えてください

検索の処理の場合では、
複数テーブルがありSQLで結合した検索する場合と、
一個一個検索し、DataTableでRelation?ではる場合とではどちらのほうが処理スピードが速いのでしょうか?

更新系の処理が入る場合は、Relationで結合した方が処理的によいのでしょうか?
テーブルを更新する時は、行単位の項目と一致するものを検索対象として全ての行が一致する時に更新した方がいいのか、キー項目を検索対象としてそのキーが合うデータだけを更新した方がいいのでしょうか?

教えてください
2004/08/27(Fri) 11:08:56 編集(投稿者)

■No5852に返信(NAILさんの記事)
> 初心者な私に教えてください
>
> 検索の処理の場合では、
> 複数テーブルがありSQLで結合した検索する場合と、
> 一個一個検索し、DataTableでRelation?ではる場合とではどちらのほうが処理スピードが速いのでしょうか?

ん???
WHERE句で結合するのと、データベース側で結合するの(ビュー)とではどっちが早いってこと?
どちらにしても、プログラム内で時間計測してやってみればいいんでないかい?
一概には言えないけど、どちらもSQL文を実行して結果を出すので通常は変わんないような気が...

> 一個一個検索し、

ただ、1回1回SQL文を投げちゃ、激遅になります。

> テーブルを更新する時は、行単位の項目と一致するものを検索対象として全ての行が一致する時に更新した方がいいのか、キー項目を検索対象としてそのキーが合うデータだけを更新した方がいいのでしょうか?

では、何の為の「キー」が存在しているのですが?
一意識別のためではないのですか?

# ただし、キーが複数ある場合で外部結合などをやる場合は、
# レコード数によって、結合する項目を増やした方が早い場合と遅い場合がある。
# また、検索クエリとかをかけると、激遅になる場合もあります。(CASE WHEN)


■追記

 変に曲解して答えていたら、申し訳ありません m(_ _)m
  • 題名: Re[1]: 処理スピード(結合)
  • 著者: SH
  • 日時: 2004/08/27 11:13:03
  • ID: 5855
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
NAIL さん、こんにちわ。

質問の内容を全部読み取っているわけではないですが、
言いたい事は、細かく複数のSQLを発行するのと、一回のSQLで済ますのと、
どっちが速いかって事ですよね??

検索のみだろうが、更新が入ろうが、
SQLの発行回数が少ないほうが確実に速いです。

更新系ならなおさらで、
コミットやロールバックを何度も行うとパフォーマンスはかなり低下します。

ためしに、100件くらいやってみると違いがわかるんじゃないかと思います。。
ということは、SQLで結合した方が早いということですか?

両方試せばいいじゃん。とか言いがちかもしれませんが、
Reletionの使い方があまりわかっていないので、使い方の説明をしてくれると助かります
2004/08/27(Fri) 11:38:52 編集(投稿者)

■No5857に返信(NAILさんの記事)
> ということは、SQLで結合した方が早いということですか?

かなり複雑の検索クエリがなければね。
普通は検索クエリなんか使わないから、気にしなくて良いです。

まあ、ただの結合なら、↓の引用通り1回1回飛ばすより遥かに早いということです。

/*--引用はじめ----------------------------------------------------*/

>>5853(私の記事)
> ただ、1回1回SQL文を投げちゃ、激遅になります。

>>5855(SHさんの記事)
> 検索のみだろうが、更新が入ろうが、
> SQLの発行回数が少ないほうが確実に速いです。

/*--引用おわり-----------------------------------------------------*/



> 両方試せばいいじゃん。とか言いがちかもしれませんが、
> Reletionの使い方があまりわかっていないので、使い方の説明をしてくれると助かります

そういうのって簡単に調べれると思うのですが...
ココは、調べた結果わかんなくて、聞くところじゃないのですか?
http://dobon.net/vb/bbs/index.html
NAILさん、こんばんは。

処理スピードはSQLの知識に左右されます。
例えば、追加、更新、削除をひとつの処理で行う場合、
SQL ServerやOracleでは、ストアドプロシージャを使ったほうが遥かにパフォーマンスがいいのは解りますよね?(当然トランザクションを使うのが前提です)
でも、逆にSQL文で参照テーブル数が複数ある場合、(DBサーバーによっては参照テーブル数に制限があります「設定変更可」)アプリ側で一旦キーを絞ってから改めて参照し直す方がパフォーマンスが良かったりします。
つまり、いかにパフォーマンスの良いSQL処理を行ったほうが良いかは、経験と知識になるのです。
その事から、みなさんが回答されている通り、御自分で両方試したほうがハッキリするのです。

経験を積むためにも、御自分で「Reletion(リレーショナルデータベースの事だと解釈しておきます。)の使い方があまりわかっていない」と言うのではなく、「Reletionの使い方」を勉強してみてください。
例えば、「インデックス、キー、トランザクション、外部結合」等など、SQLを利用する者にとっては必要な知識です。ググッったら、たくさんの情報がありますよ。

DOBON.NET | プログラミング道 | プログラミング掲示板