0

Sybase ASE 15.0.2 にアクセスするアプリケーションで作業しています。現在のコードはリモート データベース (CIS) にアクセスし、プロキシ テーブル定義を使用して行を挿入します (宛先テーブルは DOL - DRL テーブル - PK 行が定義されています)。アイデンティティとして、常に成長しています)。現在のコードは、選択を実行して行が既に存在するかどうかを確認し、重複データの挿入を回避します。

リモート テーブルにもテーブルに PK 定義があるため、行をコミットする前に PK 検証が再度行われることを理解しています。選択チェックは PK 検証によって再び効果的に行われるため、削除する予定ですが、多くの重複を含むファイルを受信した場合、データをコミットしようとしたときに、テーブルが不必要な競合に苦しむ可能性があるのではないかと心配しています。

Sybase ASEが最後の行を保持しようとし、重複をチェックする前にデータを書き込むかどうかはわかりません。また、テーブルが非常に大きい場合、インデックス全体を調べて重複を見つけるのにかかる時間についても心配しています。

次のリンクhttp://dcx.sybase.com/1200/en/dbusage/insert-how-transact.htmlで SQL のドキュメントを見つけましたが、ASE ではありません。

私が見つけることができる最高のものは、次の説明です

https://groups.google.com/forum/?fromgroups#!topic/comp.databases.sybase/tHnOqptD7X8

ただし、行がどのようにロックされているか (および、PK チェックの前または同時に書き込むための最適化があるかどうか) については詳しく説明していません。 PK がコミットされた最後の行よりも正に大きい行

ありがとう

アレックス

4

2 に答える 2

0

SqlAnywhere とは異なり、ASE が設定するオプションはありませんwait_for_commit。主キー制約は、コミット時ではなく、挿入時にチェックされます。あなたの投稿から私が理解している問題は、重複を含む可能性のあるファイルから大量の挿入がある場合、一時テーブルにロードし、重複を確認し、重複を削除してから一意のものを挿入することです。一括挿入は、主キーの違反を引き続きチェックしますが、はるかに高速です。ただし、ロールバックがないため、関連するコストはありません。挿入ステートメントは、常にオール オア ナッシングです。1 つの行が重複していても、insert ステートメント全体が失敗します。検証に制約を使用するのではなく、エラーのないアプローチで挿入する前に確認してください。これは、失敗する可能性があり、ロールバックに再びコストがかかるためです。

于 2013-06-04T01:33:01.257 に答える