トップ回答者
データベースからデータセットへ持ってくるのデータ量の違いについて

質問
-
あるSQL Server 2008 Express には10万件のデータがあるとします。
うち半数は男性だとします。
データベースの男性に対しての値を操作するアプリをVB2010で作りたく、
このアプリのデータセットへ引っ張ってくるデータをできるだけ少なくしたい場合には、データベースエクスプローラーから[新しいクエリ]でデータテーブルを作成する場合と
データソースの[ウィザードでデータソースを構成]でいったんデータテーブルを作成し、
出来上がったデータテーブルのテーブルアダプターに[クエリの追加]にてFillby○○を
作成する場合とでは、データベースからひっぱってくるデータ量に違いがでてくるのでしょうか?
みなさんは、引っ張ってくるデータ量をできるだけ少なくしたい場合には
どのようにやってらっしゃいますか?ご教示の程、よろしくお願い申し上げます。
回答
-
ウィザードの作成手順ではなく、ウィザードで作成されたメソッドが発行するSQLによって取得するデータが決まります。
今回の場合、いずれの方法でも、発行されるのはWHERE句で男性のみに限定するSQLで変わりませんから、取得されるデータも変わりません。
Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
- 回答としてマーク kei_chan_gt 2012年5月14日 13:42
-
> データベースからひっぱってくるデータ量に違いがでてくるのでしょうか?
最終的に同じクエリを SQL Server に発行するならデータ量は変わらないと思います。
私なら、必要最小限なレコードを必要なカラム分だけ持ってくるようにします。
その前に、10万件もレコード引っ張ってくる必要が本当にあるのか、仕様自体を疑いますが。ひらぽん http://d.hatena.ne.jp/hilapon/
- 回答としてマーク kei_chan_gt 2012年5月14日 13:42
-
データベースからひっぱってくるデータ量に違いがでてくるのでしょうか?
データベースからひっぱってくるデータは、どちらもデータテーブルに保存されます。どのようなデータをひっぱってくるかは、どのようなクエリを実行するかに依存します。どのようにデータテーブルを作るかは関係ありません。
みなさんは、引っ張ってくるデータ量をできるだけ少なくしたい場合には
どのようにやってらっしゃいますか?男性分だけだとして約5万件だと思いますが、通常、これだけの量をデータテーブルに落とすことはありません。ユーザーに5万件の一覧を見せても、一般的には必要なデータはその中のごく一部です。したがって、ユーザーにはもっと抽出条件を絞って、少ないデータを見せるようにします。また、男性のデータから統計などしたい場合は、SQL Server側でストアドプロシージャなどを使って処理し、その結果を取得するようにします。
通常、データベースから多くのデータを一度に抜いてくることはありません。kei_chan_gtさんはどのようなことをされたいのでしょうか? それによって解決への方向が変わるのではないかと思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク kei_chan_gt 2012年5月14日 13:42
-
SELECT ○○,○○ FROM ○○ WHERE 性別 = 1
としたとき、もしかして前者は、性別 = 1 のデータのみを引っ張り
後者は、全データを引っ張ってきてから 性別 = 1 のデータを表示となるのかな?と思った次第です。
なるほど。そこに疑問があったわけですね。既に回答が出ている通り、そんなことはありません。データベースからは性別 = 1であるデータのみを引っ張ってきます。ですから、プログラム側でしっかり抽出条件を絞ってください。
でもやはり、多くのデータ持つテーブルを対象に SELECT を投げる場合には
非接続型よりも、従来の接続型(ストアドやコマンド)の方がよろしいのでしょうか?接続型がストアドプロシージャやコマンドというわけではありませんよ。接続型は、ある処理を行う時に最初から最後までデータベースにつながったままになりますが、非接続型は処理の途中で一旦データベースから接続が切れ、通常はデータテーブルに取得したデータで処理を続行し、最後に処理した結果をデータベースにふたたび接続して返す流れになります。コマンドはデータベースと対話する手段を提供するものであり、手段の方法の一つがストアドロシージャです。ですから、コマンドは接続型、非接続型にかかわらず使用できます。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク kei_chan_gt 2012年5月14日 13:42
すべての返信
-
ウィザードの作成手順ではなく、ウィザードで作成されたメソッドが発行するSQLによって取得するデータが決まります。
今回の場合、いずれの方法でも、発行されるのはWHERE句で男性のみに限定するSQLで変わりませんから、取得されるデータも変わりません。
Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
- 回答としてマーク kei_chan_gt 2012年5月14日 13:42
-
> データベースからひっぱってくるデータ量に違いがでてくるのでしょうか?
最終的に同じクエリを SQL Server に発行するならデータ量は変わらないと思います。
私なら、必要最小限なレコードを必要なカラム分だけ持ってくるようにします。
その前に、10万件もレコード引っ張ってくる必要が本当にあるのか、仕様自体を疑いますが。ひらぽん http://d.hatena.ne.jp/hilapon/
- 回答としてマーク kei_chan_gt 2012年5月14日 13:42
-
データベースからひっぱってくるデータ量に違いがでてくるのでしょうか?
データベースからひっぱってくるデータは、どちらもデータテーブルに保存されます。どのようなデータをひっぱってくるかは、どのようなクエリを実行するかに依存します。どのようにデータテーブルを作るかは関係ありません。
みなさんは、引っ張ってくるデータ量をできるだけ少なくしたい場合には
どのようにやってらっしゃいますか?男性分だけだとして約5万件だと思いますが、通常、これだけの量をデータテーブルに落とすことはありません。ユーザーに5万件の一覧を見せても、一般的には必要なデータはその中のごく一部です。したがって、ユーザーにはもっと抽出条件を絞って、少ないデータを見せるようにします。また、男性のデータから統計などしたい場合は、SQL Server側でストアドプロシージャなどを使って処理し、その結果を取得するようにします。
通常、データベースから多くのデータを一度に抜いてくることはありません。kei_chan_gtさんはどのようなことをされたいのでしょうか? それによって解決への方向が変わるのではないかと思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク kei_chan_gt 2012年5月14日 13:42
-
みなさま、ご回答ありがとうございます<(_)>
すいません、10万件とは例えです。実例ではありません。
実際は500件程度です(^_^;)あまりに少ないデータ量だと「それくらいじゃたいして差はないよ」と
言われるかな?と思い、データ量を多めに書いちゃいました(^^ゞ
にしても10万件は極端でした。すみません。将来的にデータ量が増える事を見越して、今のうちにできるだけ
最小限のデータ件数のみを引っ張ってくるシステムを作りたいと
思っておりました。システムは健診結果の分析システムです。投稿した手順ではどちらも同じく
SELECT ○○,○○ FROM ○○ WHERE 性別 = 1
としたとき、もしかして前者は、性別 = 1 のデータのみを引っ張り
後者は、全データを引っ張ってきてから 性別 = 1 のデータを表示となるのかな?と思った次第です。
もちろん実際は抽出条件をもっと絞る予定です。でもやはり、多くのデータ持つテーブルを対象に SELECT を投げる場合には
非接続型よりも、従来の接続型(ストアドやコマンド)の方がよろしいのでしょうか?私のあいまいな書き込みの内容で混乱させてしまい、申し訳ございません。
どうかご教示の程、よろしくお願い申し上げます。- 編集済み kei_chan_gt 2012年5月11日 3:48 追記
-
SELECT ○○,○○ FROM ○○ WHERE 性別 = 1
としたとき、もしかして前者は、性別 = 1 のデータのみを引っ張り
後者は、全データを引っ張ってきてから 性別 = 1 のデータを表示となるのかな?と思った次第です。
なるほど。そこに疑問があったわけですね。既に回答が出ている通り、そんなことはありません。データベースからは性別 = 1であるデータのみを引っ張ってきます。ですから、プログラム側でしっかり抽出条件を絞ってください。
でもやはり、多くのデータ持つテーブルを対象に SELECT を投げる場合には
非接続型よりも、従来の接続型(ストアドやコマンド)の方がよろしいのでしょうか?接続型がストアドプロシージャやコマンドというわけではありませんよ。接続型は、ある処理を行う時に最初から最後までデータベースにつながったままになりますが、非接続型は処理の途中で一旦データベースから接続が切れ、通常はデータテーブルに取得したデータで処理を続行し、最後に処理した結果をデータベースにふたたび接続して返す流れになります。コマンドはデータベースと対話する手段を提供するものであり、手段の方法の一つがストアドロシージャです。ですから、コマンドは接続型、非接続型にかかわらず使用できます。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク kei_chan_gt 2012年5月14日 13:42