2012-01-04 122 views
5

MS SQL 2005にプライマリキーを持つテーブルがあります。これには数十万レコードがあります。管理スタジオでレコードを検索すると非常に素早くなりますが、以下のコードを使用して検索すると数秒かかることがあります。行を更新する必要があるので、データセットを使用する必要があります。どのようにパフォーマンスを向上させることができますか?1レコードでもSqlDataAdapter.Fillの処理速度が遅い

objData . ProcName ="myProcName" 
objData . CreateCommand() 
objData . Parameters("@BName", SqlDbType. VarChar, 20, "MyBranch1") 
SqlDataAdapter da = objData . createAdapter() 
da . Fill(ds,"MyTable1") 

procのコードは非常にシンプルですが:

select * from MyTable1 Where BranchName = @BName 

このデータセットはつもりである5つの表は、トータルの時間はあなたがDataReaderを使用することを検討すべきである分

+1

Datareaderは行く道を変えています:http://msdn.microsoft.com/en-us/library/haa3afyz%28v=VS.100%29.aspx – broke

+0

ここにサンプルコード – Adeem

答えて

2

以上で同じ道を開いてきましたデータセットではなく、sqlコマンドを使用して手動で更新します。私はまったく同じことを実行している対、応答を返すために何秒かかったSqlDataAdapterオブジェクトを使用して、非常に類似した遅延動作を見てきました

+0

がありますデータセットでより良いパフォーマンスを得ることは不可能ですか?そして、私は十分な基準を使用しているデータセットの5つのdatatablesのすべての5つ以上の行が含まれていません – Adeem

+0

あなたがdatareaderを使用すると、dataadapterとデータセットのincaseの間に一度に一つのレコードを移動すると、アダプタはすべてのレコードをフェッチし、その型付きのデータセットに依存するかどうかに依存して制約と関係もあります。 このオブジェクトの作成には、持っているレコードの数に正比例して時間がかかります。 これはwebappまたはWindowsアプリですか? –

+0

これはwebappであり、コードの多くを変更することなくパフォーマンスを向上させたいと考えていました。しかし、それが可能でないならば、私はそれをデータリーダーに変えようとします。あなたはDataRowオブジェクトなどについて正しいです。データセット内の制約や関連するものを無視するような属性や何かを設定できますか? – Adeem

1

Uはまた、おそらく供給追加基準によってあなたがフェッチされたレコードの数を制限することを検討すべきですSQL Server Mgmt Studio(同じクライアントマシン上)の手順を使用して、即座に応答を返しました。

影響を受けるテーブルのインデックスが再構築され、SQLDataAdapterの応答が瞬時に発生しました。

このような遅延動作は、SQLDataReaderでは見たことがありません。私はしばしばSQLDataReaderを使い、MyTable.Load(MySQLDataReader)を実行します。 SQLDataAdapterよりもオーバーヘッドが少ないようです。

関連する問題