ホームページ >データベース >mysql チュートリアル >サーバー リンクと OPENQUERY はどのようにしてデータベース間のクエリを容易にすることができますか?
クロスデータベースクエリ: サーバーリンクと OPENQUERY を使用する
さまざまなデータベースのデータにアクセスする方法は数多くありますが、その 1 つはサーバー リンクと OPENQUERY を使用することです。
サーバーリンク
異なるサーバー上のデータベースに接続するには、ストアド プロシージャ sp_addlinkedserver
を使用してサーバー リンクを作成します。これにより、リンク サーバー上のテーブルにアクセスし、クエリを実行できるようになります。異なるデータベースのテーブルを結合するには、テーブル名の前にリンク サーバーの名前を追加するだけです。例:
<code class="language-sql">SELECT * FROM [LinkedServerName].[DatabaseName].[SchemaName].[TableName]</code>
OPENQUERY
また、OPENQUERY を使用すると、サーバーに永続的に接続することなく、リモートで SQL ステートメントを実行し、データを取得できます。構文は次のとおりです:
<code class="language-sql">SELECT * FROM OPENQUERY([LinkedServerName], 'SELECT * FROM [DatabaseName].[SchemaName].[TableName]')</code>
OPENQUERY は、リモート サーバーがクエリの実行を最適化できるようにすることでパフォーマンスを向上させます。さらに、結果を後続のクエリ用の一時テーブルとしてキャッシュできます。
例
サーバー リンクと OPENQUERY の使用法を説明するために、異なるサーバー上の異なるデータベースにある 2 つのテーブルを結合するシナリオを考えてみましょう。
サーバーリンク方法:
<code class="language-sql">SELECT * FROM [Database1].[dbo].[Table1] t1 INNER JOIN [LinkedServerName].[Database2].[dbo].[Table2] t2 ON t1.ID = t2.ID</code>
OPENQUERY メソッド:
<code class="language-sql">-- 从远程数据库获取数据 SELECT * INTO #TempTable FROM OPENQUERY([LinkedServerName], 'SELECT * FROM [Database2].[dbo].[Table2]') -- 将临时表与本地表连接 SELECT * FROM [Database1].[dbo].[Table1] t1 INNER JOIN #TempTable t2 ON t1.ID = t2.ID</code>
これら 2 つの方法のどちらを選択するかは、データ サイズ、クエリの複雑さ、パフォーマンス要件などの要因によって異なります。
以上がサーバー リンクと OPENQUERY はどのようにしてデータベース間のクエリを容易にすることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。