3

ここでは、数千万のレコードを含むデータベースを扱っています。データベースに接続し、テーブル内の単一の列からすべてのデータを取得し、それに対して何らかの操作を実行して更新するアプリケーションがあります(SQL Serverの場合-カーソルを使用)。

何百万ものレコードの場合、更新には非常に長い時間がかかります。だから私はそれをより速くしたい

  1. 各スレッドに独立した接続を持つ複数のスレッドを使用します。

また

  1. すべてのスレッドで単一の接続を使用して更新クエリを起動します。

どちらが速いか、または他のアイデアがある場合は説明してください。

データベースの種類に依存しない解決策が必要です。または、データベースの種類ごとに特定の解決策を知っている場合でも、返信してください。

4

3 に答える 3

0

すべては、データベースとそれが実行されているハードウェアに依存します。

データベースが並行処理を利用でき、共有リソースでの競合を回避できる場合 (たとえば、ページ ベースのロックは複数のレコードにまたがるが、レコード ベースはそうではない)。この場合の共有リソースにはハードウェアが含まれます。単一のコア ボックスでは、CPU を集中的に使用する複数のアクティビティ (SQL の解析など) を完全に並行して実行することはできません。

データベース自体が同時実行性を活用できない場合でも、同時挿入を使用すると、ネットワーク待ち時間を軽減できる可能性があります。

パフォーマンスの問題と同様に、特定のシナリオでのテストに代わるものがあります。

于 2009-03-03T10:13:56.247 に答える
0

可能であれば、ストアド プロシージャを使用してすべての処理を行い、レコードを更新してみてください。

于 2009-03-03T10:56:36.970 に答える