C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: DB読込からデータセット作成までの処理時間を短縮したい


(過去ログ 93 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■55471 / inTopicNo.1)  DB読込からデータセット作成までの処理時間を短縮したい
  
□投稿者/ にゃん (1回)-(2010/12/03(Fri) 03:29:56)

分類:[.NET 全般] 

初めて質問します、詳しい方どうかアドバイスをよろしくお願いいたします。
DBを読んでデータセットを作成している処理があるのですが、処理時間に25秒かかります。
全体の処理が35秒なのでこの部分でかなり時間を取られています。
ソースはこちらになります。
    Public Const strTableName As String = "fx_data"
    Dim strConnection As String = "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=C:\db1.mdb"

    Public Sub DS_Create()

        Dim dSet As DataSet = New DataSet
        Dim dAdp As OleDb.OleDbDataAdapter
        Dim cn As OleDb.OleDbConnection

        cn = New System.Data.OleDb.OleDbConnection(strConnection)

        Dim sql As String
        sql = "SELECT * FROM  " & Me.SelectDataTableName & _
        " WHERE DTYYYYMMDD >= " & strFrom & "AND DTYYYYMMDD <= " & strTo & _
        "AND FXTIME >= " & Me.TimeFrom & "AND FXTIME <= " & Me.TimeTo & _
        " ORDER BY DTYYYYMMDD,FXTIME"

        dAdp = New OleDb.OleDbDataAdapter(sql, cn)
        dAdp.Fill(dsData, strTableName)

    End Sub

・DBはACCESS
・検索対象のDTYYYYMMDDとFXTIMEにはインデックスを付けています。
・マシーンのスペック CPU:Celeron E1200(1.6GHz) メモリ:2G OS:Windows XP
・この処理による取得件数は約500,000件
・テーブルにあるデータは約3,400,000件
・レコードはすべてこのような状態です。
TICKER	DTYYYYMMDD	FXTIME	OPEN	HIGH	LOW	CLOSE	VOL	ID
GBPJPY	20010103	100	171.88	171.88	171.86	171.86	4	2

大幅に処理時間を短縮できる方法を知っている方がいらっしゃいましたら、どうかよろしくお願いいたします。

引用返信 編集キー/
■55472 / inTopicNo.2)  Re[1]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ shu (220回)-(2010/12/03(Fri) 08:02:03)
No55471 (にゃん さん) に返信

アクセス立ち上げて直接同じSQLを実行してみて下さい。
その時間がそれほど変わらないのであれば無理でしょう。

500000件も取得することの必要性は絶対なのでしょうか、取得するレコード数を絞ってみては
どうでしょう?
引用返信 編集キー/
■55474 / inTopicNo.3)  Re[2]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ todo (68回)-(2010/12/03(Fri) 09:41:48)
DataSetに蓄える必要がなければ、DataReaderを使った方がよいです。

DataSet vs DataReader 検証 .NET2.0
http://blogs.wankuma.com/ganfield/archive/2007/02/06/61084.aspx

DataReaderとDataSetの性能比はなんと30倍
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21097&forum=7
引用返信 編集キー/
■55481 / inTopicNo.4)  Re[1]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ オショウ (564回)-(2010/12/03(Fri) 11:55:51)
> ・マシーンのスペック CPU:Celeron E1200(1.6GHz) メモリ:2G OS:Windows XP
> ・この処理による取得件数は約500,000件
> ・テーブルにあるデータは約3,400,000件
> ・レコードはすべてこのような状態です。

  ACCESSのバージョンは何?

  上記要件からして、ACCESSをやめてSQL Serverへ移行するとか・・・
  PCの性能アップを図るとか・・・

※ SQL Server Expressでもよいので。
  因みに、MDBのファイルサイズは何MB?もしかして何GB?
  よくMDB壊れないネ〜

※ DBの登録件数の1割以上をSELECTすると言うことは物理的にファイル
  サイズの1割以上を読まないとダメなので、そのサイズ自体が時間を要
  する処理なので、ファイルが小さくなれば当然時間も短縮する。
  あと、インデックスの配置やHDD上のフラグメンテーションも当然、
  処理時間に影響する。

  時短する要素はいろいろありますが、現在の環境や方式が適していない
  と思いますヨ〜

以上。参考まで
引用返信 編集キー/
■55483 / inTopicNo.5)  Re[1]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ やじゅ (1783回)-(2010/12/03(Fri) 12:26:51)
やじゅ さんの Web サイト
No55471 (にゃん さん) に返信
> 大幅に処理時間を短縮できる方法を知っている方がいらっしゃいましたら、どうかよろしくお願いいたします。

その処理を行う用途はなんでしょうか?
それによっては、回答方法も違ってくると思います。

データグリッドビューに表示するだけなら、仮想モードを使う手もあります。
ページング方式にして、500件単位とかで読込むようにするとか。

引用返信 編集キー/
■55518 / inTopicNo.6)  Re[2]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ にゃん (2回)-(2010/12/05(Sun) 02:48:53)
No55472 (shu さん) に返信

返信ありがとうございます。

> ■No55471 (にゃん さん) に返信
>
> アクセス立ち上げて直接同じSQLを実行してみて下さい。
> その時間がそれほど変わらないのであれば無理でしょう。
約2秒でした。
ということはデータセットにセットするのに時間がかかっているということでしょうか。

> 500000件も取得することの必要性は絶対なのでしょうか、取得するレコード数を絞ってみては
> どうでしょう?
500000件の取得は必要なのでレコードの数を減らすことはできません。
なので、データセットを使わない方法を模索しています。
引用返信 編集キー/
■55519 / inTopicNo.7)  Re[3]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ にゃん (3回)-(2010/12/05(Sun) 02:53:54)
No55474 (todo さん) に返信

返信ありがとうございます。

> DataSetに蓄える必要がなければ、DataReaderを使った方がよいです。
アドバイスありがとうございます、DataSetなしでDataReaderで対処できないか試してみます。
結果がでましたら報告いたします。

引用返信 編集キー/
■55520 / inTopicNo.8)  Re[2]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ にゃん (4回)-(2010/12/05(Sun) 03:00:35)
No55481 (オショウ さん) に返信
返信ありがとうございます。

>   ACCESSのバージョンは何?
2003 SP3です。

> ※ SQL Server Expressでもよいので。
>   因みに、MDBのファイルサイズは何MB?もしかして何GB?
>   よくMDB壊れないネ〜
約2Gあります。

>   時短する要素はいろいろありますが、現在の環境や方式が適していない
>   と思いますヨ〜
DataReaderで解決しないようでしたら環境を変えてみます。
引用返信 編集キー/
■55521 / inTopicNo.9)  Re[2]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ にゃん (5回)-(2010/12/05(Sun) 03:09:49)
No55483 (やじゅ さん) に返信

返信ありがとうございます。

> その処理を行う用途はなんでしょうか?
> それによっては、回答方法も違ってくると思います。
50万レコードのデータセット「A」を元に約400レコードのデータセット「B」を作成し、BとAを比較し約400レコードのデータセット「C」を作成し、Cを元にデータグリッドビューに表示しています。
引用返信 編集キー/
■55537 / inTopicNo.10)  Re[3]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ shu (230回)-(2010/12/05(Sun) 22:17:09)
No55518 (にゃん さん) に返信
>>アクセス立ち上げて直接同じSQLを実行してみて下さい。
>>その時間がそれほど変わらないのであれば無理でしょう。
> 約2秒でした。
> ということはデータセットにセットするのに時間がかかっているということでしょうか。
2秒なら早い方だと思いますがテーブルビューを表示するまでの時間で計りました?それとも
最終レコードへの移動の時間で計りましたか?最終レコードまで移動しないと読み込んだことに
ならないです。

> 50万レコードのデータセット「A」を元に約400レコードのデータセット「B」を作成し、BとAを比較し約400レコードのデータセット「C」を作成し、> Cを元にデータグリッドビューに表示しています。
これだとどんな条件かいまいち見えませんがCを取得するのが目的ならもっと絞ることは出来ませんか?

引用返信 編集キー/
■55545 / inTopicNo.11)  Re[3]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ マサヤ (182回)-(2010/12/06(Mon) 10:45:42)
ACCESSの制限容量って2GBだと思います。
現在が2GBであるなら、SQLServerに移行してもいいレベルですね。

ACCESSのデータ処理に時間がかかっているのなら、VIEWを使用するといいかと思います。
自分はSQLServerでしか使用したことないので大したことを言えたレベルではないのですが。

引用返信 編集キー/
■55916 / inTopicNo.12)  Re[4]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ にゃん (7回)-(2010/12/17(Fri) 21:58:03)
No55537 (shu さん) に返信
> ■No55518 (にゃん さん) に返信
> >>アクセス立ち上げて直接同じSQLを実行してみて下さい。
> >>その時間がそれほど変わらないのであれば無理でしょう。
>>約2秒でした。
>>ということはデータセットにセットするのに時間がかかっているということでしょうか。
> 2秒なら早い方だと思いますがテーブルビューを表示するまでの時間で計りました?それとも
> 最終レコードへの移動の時間で計りましたか?最終レコードまで移動しないと読み込んだことに
> ならないです。
最終レコードへの移動までの時間で2秒でした。

>>50万レコードのデータセット「A」を元に約400レコードのデータセット「B」を作成し、BとAを比較し約400レコードのデータセット「C」を作成し、> Cを元にデータグリッドビューに表示しています。
> これだとどんな条件かいまいち見えませんがCを取得するのが目的ならもっと絞ることは出来ませんか?
50万レコードすべて見なければいけないのでやはり絞ることはできません。

DataReaderを利用し、データセットを作らないように変更したら、100秒かかった処理が30秒まで短縮できました。
ただし弊害としてプログラムがわかり難くなり、データセットがないので拡張性がなくなりました。

またわからないことがあったら質問させていただきます。
このたびはありがとうございました。
引用返信 編集キー/
■55917 / inTopicNo.13)  Re[4]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ にゃん (9回)-(2010/12/17(Fri) 22:03:12)
No55545 (マサヤ さん) に返信
> ACCESSの制限容量って2GBだと思います。
> 現在が2GBであるなら、SQLServerに移行してもいいレベルですね。
とりあえず今は安定しているのでこのままACCESSを使っていきます。
不安定になったらSQLServerの移行も考えます。

> ACCESSのデータ処理に時間がかかっているのなら、VIEWを使用するといいかと思います。
> 自分はSQLServerでしか使用したことないので大したことを言えたレベルではないのですが。
データ取得自体には時間がかかっていないのでVIEWは使わない方向で行きます。
色々とアドバイスありがとうございました。
引用返信 編集キー/
■55918 / inTopicNo.14)  Re[5]: DB読込からデータセット作成までの処理時間を短縮したい
□投稿者/ にゃん (10回)-(2010/12/17(Fri) 22:03:56)
No55917 (にゃん さん) に返信
> ■No55545 (マサヤ さん) に返信
>>ACCESSの制限容量って2GBだと思います。
>>現在が2GBであるなら、SQLServerに移行してもいいレベルですね。
> とりあえず今は安定しているのでこのままACCESSを使っていきます。
> 不安定になったらSQLServerの移行も考えます。
>
>>ACCESSのデータ処理に時間がかかっているのなら、VIEWを使用するといいかと思います。
>>自分はSQLServerでしか使用したことないので大したことを言えたレベルではないのですが。
> データ取得自体には時間がかかっていないのでVIEWは使わない方向で行きます。
> 色々とアドバイスありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -