MSSQL
からへのリンク サーバー クエリを使用していますmySql
。
MySql
クエリ対象のテーブルには 800K + レコードがあります
一時テーブルを使用してリンク サーバーから結果を取得し、その一時テーブルで SQL クエリの結合を行っています。
以下の間にパフォーマンスの違いはありますか?
Declare
@MyString varchar(max),
@Address varchar(20),
@tempTable (Address, ColumnB, ColumnC)
set @MyString = 'Select Address, ColumnB, ColumnC from schemaname.tablename where ''' + convert(varchar(30),@Address) + ''') order by ColumnB desc limit 10'
set @MyString = 'Select * from Openquery([My_Linked_Server], ''' + REPLACE(@MyString, '''', '''''') + ''')'
insert into @tempTable
exec (@MyString)
と
Set @MyString = 'Select Address, ColumnB, ColumnC from schemaname.tablename where ''' + convert(varchar(30),@Address) + ''') order by ColumnB desc limit 10'
exec (@MyString) at My_Linked_Server
(これはすべて で行われますSQL
) --second アプローチで現在エラーが発生しています:
リンク サーバー "My_Linked_Server" の OLE DB プロバイダー "MSDASQL" がメッセージ "[MySQL][ODBC 5.2(w) Driver] Optional feature not supported" を返しました。メッセージ 7391、レベル 16、状態 2、行 14 リンク サーバー "My_Linked_Server" の OLE DB プロバイダー "MSDASQL" が分散トランザクションを開始できなかったため、操作を実行できませんでした。
DTCが開始されました
これを使用する際のもう 1 つの問題は、結果のタイミングが 1 秒から 1 分でランダムになることです。
前もって感謝します!
アップデート:
最初のアプローチは非常に良い結果をもたらします。残っている唯一の問題は、結果のランダムなタイミングです。80% 以上の場合、結果はすぐに得られます。これは、MySql
テーブル ロック (タイプ のテーブルMyISAM
) が原因である可能性があります。これは、このテーブルへの絶え間ない書き込みと、使用状況情報のSQL Server
クエリで追加のジョブが実行されているためです。MySQL
これは遅延の合理的な説明ですか?