我正在使用从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
)--第二种方法目前给我一个错误:
链接服务器“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 分钟
提前致谢!
更新:
第一种方法给出了相当好的结果。剩下的唯一问题是结果的随机时间。超过 80% 的结果是即时的。这可能是由于MySql
表锁(类型为 的表MyISAM
)造成的,因为不断写入此表以及在SQL Server
查询MySQL
使用信息时运行的其他作业。
这是延迟的合理解释吗?