1

MSSQL DB (「A」) からデータを取得し、MSSQL DB で作成された日付を使用して MySQL DB (「B」) に挿入しています。私は単純なロジックでそれを行っていますが、これを行うためのより高速で効率的な方法が必要です。以下は、関連する一連のロジックです。

  1. MSSQL DB 用に 1 つの接続を作成し、MySQL DB 用に 1 つの接続を作成します。

  2. 指定された日付範囲基準を満たす A からのすべてのデータを取得します。

  3. 得られたデータのどれが B に存在しないかを確認します。

  4. これらの新しいデータを B に挿入します。

ご想像のとおり、ステップ 2 は基本的にループであり、サーバーの時間制限を簡単に超えてしまう可能性があります。最初のクエリが作成されたときに、これをより速く実行する方法が必要であると感じています。これを達成するために誰かが私を正しい方向に向けることができますか? 両方の DB に「1 つの」接続を確立して、以下のようなことを行うことはできますか?

SELECT * FROM A.some_table_in_A.some_column WHERE 
   "it doesn't exist in" B.some_table_in_B.some_column
4

3 に答える 3

3

リンクされたサーバーがこれに適している可能性があります

リンク サーバーを使用すると、OLE DB データ ソースに対する分散型の異種クエリにアクセスできます。リンク サーバーが作成された後、このサーバーに対して分散クエリを実行でき、クエリで複数のデータ ソースのテーブルを結合できます。リンク サーバーが SQL Server のインスタンスとして定義されている場合、リモート ストアド プロシージャを実行できます。

この HOWTOも参照してください。

于 2012-05-18T21:59:37.110 に答える
0

私があなたの質問を正しく理解しているなら、あなたはMSSQLDB内のものをMySQLDBに移動しようとしているだけです。また、移行を行うために使用しているある種のフィルター基準があると想定しています。これが正しければ、分散クエリを使用してMySQLデータベースのクエリを実行できるMSSQLのストアドプロシージャを使用してみてください。次に、そのストアドプロシージャを使用して、データベース側でループまたはチェックを実行できます。フロントエンドサーバーは1つの接続を確立するだけで済みます。

于 2012-05-18T21:47:52.057 に答える
0

MySQL データベースに主キーが定義されている場合は、少なくともステップ 3 (「取得したデータのどれが B に存在しないかを確認する」) をスキップできます。を使用するINSERT IGNORE INTO...と、すべてのレコードの挿入が試行され、主キーを持つレコードが既に存在するレコードは黙ってスキップされます。

于 2012-05-18T23:01:30.723 に答える