SQLServerでテーブルを更新する最速の方法

user1500403

SQLServerデータベースのテーブルを頻繁に更新するVb.netアプリケーションがあります。テーブルには143列と約10,000行があります。いくつかの異なるモジュールのテーブルを更新するには同じ手順が必要であるため、更新されるデータは常に異なります。場合によっては、数行の数セルの場合もあれば、数百行と数列の場合もあります。

情報の更新に15〜30秒かかる場合があります。テーブルを1〜2秒で一括インポートして完全に書き直すことができることを考えると、その継ぎ目は非常に長くなります(それは重要ではないことを私は理解しています)。データベースは単純リカバリに設定されており、テーブルには1つのインデックスしかありません。更新バッチサイズを試してみましたが、目立った改善は見られませんでした。

以下のコードを使用して更新を行っています。速度を上げるためにできることはありますか?

 Dim oMainQueryR As String

    If DBSelectionsDS.HasChanges Then

        Try
                oMainQueryR = "SELECT * FROM DBSelections"

                Using connection As New SqlConnection(RacingConStr)
                    Using oDataSQL As New SqlDataAdapter(oMainQueryR, connection)
                        oDataSQL.UpdateBatchSize = 100
                        Using cbT As SqlCommandBuilder = New SqlCommandBuilder(oDataSQL)
                            connection.Open()
                            oDataSQL.Update(DBSelectionsDS, "DBSelectionsDetails")
                            connection.Close()
                        End Using
                    End Using
                End Using


                DBSelectionsDS.Tables("DBSelectionsDetails").AcceptChanges()

        Catch ex As Exception

            ErrMess = "ERROR - occured  " & ex.ToString
            Call WriteError()
            Call ViewError()

        End Try

    End If
エヴァンL

ボトルネックは2つの場所にあると私は喜んで賭けます。

まず、更新を実行する必要があるたびに、テーブルからすべて選択しますテーブルのサイズが大きくなるにつれて、これにはますます時間がかかります。使用するスキーマのみが必要なので、クエリ文字列を次のように変更します。SqlCommandBuilder

oMainQueryR = "SELECT * FROM DBSelections WHERE 0 = 1"

これにより、テーブルのスキーマ名と列名のみが返され、行は返されません。更新を実行するDataSetためにCommandBuilder必要なすべてのデータ情報が含まれていますこれが機能する理由に興味がある場合は、0が1と等しくなることは決してないことを考慮してください。したがって、SQLは、0 = 1の行は存在しないと言い、代わりにスキーマを返すだけです。

次に、UpdateBatchSize更新のバッチサイズを制限しています。に200行の変更されたデータがあることを検討してくださいDataSet次に、更新を完了するためにデータベースに2回アクセスする必要があります。設定UpdateBatchSize = 0するとこの制限が削除されます。デフォルトは0なので、行を削除することもできます。

そうしないと、別のトランザクションがテーブルをロックすることによってボトルネック発生する可能性がありDBSelectionsます。更新の実行中にそのテーブルに対してクエリを実行している場合は、with (nolock)ステートメントを使用するか、更新がその時点で発生する唯一のトランザクションであることを確認してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

条件付きの巨大なSQLServerテーブルの合計行を計算する最速の方法は何ですか

分類Dev

SQLSERVERでピボットテーブルを更新する方法

分類Dev

別のテーブルの情報でSQLServerのテーブルを更新する

分類Dev

他のテーブルで最小値を選択する最速の方法

分類Dev

SQLテーブルをクリアする最速の方法は何ですか?

分類Dev

大きなテーブルでボタンを選択するRuby最速の方法

分類Dev

最新のレコードを使用してSQLServerテーブルを更新する方法

分類Dev

SQLServerでテーブル行の最大数を取得する方法

分類Dev

SQLServerで3つのテーブルを結合する方法

分類Dev

pyarrowテーブルを行ごとに作成する最速の方法

分類Dev

SQLServerでテーブルのテーブル定義を取得する方法

分類Dev

SQLServerの単一の更新クエリでテーブルの列ビット値を交換する方法

分類Dev

SQLServerの複数の行を異なるテーブルで更新する

分類Dev

複数のテーブルのSQLServerの値を更新する

分類Dev

クエリ結果で既存のテーブルを更新するSQLServer 2012

分類Dev

SQLServerテーブルの更新時にDbUpdateException内でInvalidCastExceptionを取得する

分類Dev

1つのテーブル列値を別のテーブル値で更新するSQLServerクエリ

分類Dev

SQLServerテーブルのjson配列を更新する

分類Dev

別のテーブルSQLServerから値を更新する

分類Dev

別のテーブルSQLServerから値を更新する

分類Dev

2つのテーブルの2つの値を比較する最速の方法

分類Dev

キーを除いたテーブルを複製する最速の方法

分類Dev

EF:IDでフィールドを更新するための最良/最速の方法

分類Dev

大きなSQLテーブルのエントリ数を選択する最速の方法は何ですか?

分類Dev

mysqlを使用して、テーブルを結合する最速の方法は何ですか

分類Dev

SQLServerの非標準スキーマテーブルでdplyrtblを使用する方法

分類Dev

SQLServerで親子形式のテーブルデータを配置する方法

分類Dev

SQLServerでテーブル構造の変更の履歴を取得する方法

分類Dev

数字と文字のID列を持つSQLServerでテーブルを作成する方法

Related 関連記事

  1. 1

    条件付きの巨大なSQLServerテーブルの合計行を計算する最速の方法は何ですか

  2. 2

    SQLSERVERでピボットテーブルを更新する方法

  3. 3

    別のテーブルの情報でSQLServerのテーブルを更新する

  4. 4

    他のテーブルで最小値を選択する最速の方法

  5. 5

    SQLテーブルをクリアする最速の方法は何ですか?

  6. 6

    大きなテーブルでボタンを選択するRuby最速の方法

  7. 7

    最新のレコードを使用してSQLServerテーブルを更新する方法

  8. 8

    SQLServerでテーブル行の最大数を取得する方法

  9. 9

    SQLServerで3つのテーブルを結合する方法

  10. 10

    pyarrowテーブルを行ごとに作成する最速の方法

  11. 11

    SQLServerでテーブルのテーブル定義を取得する方法

  12. 12

    SQLServerの単一の更新クエリでテーブルの列ビット値を交換する方法

  13. 13

    SQLServerの複数の行を異なるテーブルで更新する

  14. 14

    複数のテーブルのSQLServerの値を更新する

  15. 15

    クエリ結果で既存のテーブルを更新するSQLServer 2012

  16. 16

    SQLServerテーブルの更新時にDbUpdateException内でInvalidCastExceptionを取得する

  17. 17

    1つのテーブル列値を別のテーブル値で更新するSQLServerクエリ

  18. 18

    SQLServerテーブルのjson配列を更新する

  19. 19

    別のテーブルSQLServerから値を更新する

  20. 20

    別のテーブルSQLServerから値を更新する

  21. 21

    2つのテーブルの2つの値を比較する最速の方法

  22. 22

    キーを除いたテーブルを複製する最速の方法

  23. 23

    EF:IDでフィールドを更新するための最良/最速の方法

  24. 24

    大きなSQLテーブルのエントリ数を選択する最速の方法は何ですか?

  25. 25

    mysqlを使用して、テーブルを結合する最速の方法は何ですか

  26. 26

    SQLServerの非標準スキーマテーブルでdplyrtblを使用する方法

  27. 27

    SQLServerで親子形式のテーブルデータを配置する方法

  28. 28

    SQLServerでテーブル構造の変更の履歴を取得する方法

  29. 29

    数字と文字のID列を持つSQLServerでテーブルを作成する方法

ホットタグ

アーカイブ