【发布时间】:2014-04-16 16:58:28
【问题描述】:
我正在运行 SQL Server 2012,并通过最新的 MySQL ODBC 驱动程序设置了与 Linux MySQL 实例的链接服务器连接。我对返回一个相当简单的“选择”查询的结果所花费的时间有点失望。
select * from OPENQUERY(LinkedServer, 'select * from mysqltable')
该表大约有 150,000 行,大约需要 70 秒才能将结果返回到 SSMS。相反,如果我通过 MySQL 客户端应用程序(在本例中为 Navicat Essentials,与 SQL Server 在同一台计算机上)查询表,则查询将在大约 1 秒内执行。
我知道 Linked Servers 和 ODBC 会更慢,但我对这种性能下降感到惊讶,尤其是在使用如此直接的查询时。
我已经尝试了 Unicode 和 ANSI 驱动程序,并且性能相似。 MySQL DB 是 UTF-8 CharSET 和 Coalition,表是 InnoDB。我也尝试过明确选择列而不是 *。再次没有区别。
以前有没有人遇到过这种情况并获得过任何加快性能的提示,或者这很正常吗?
提前致谢。
【问题讨论】:
-
您使用的 MySQL 客户端应用程序是否只发回前几行,然后在您滚动浏览结果集时检索其他行?我知道 Toad 在连接到 Oracle 时会这样做,并且有时会让您认为如果所有行一起返回,查询的运行速度会比它快得多。
-
这是一个有趣的建议。我会检查日志以获取其他查询。
-
我们使用定期更新的临时表(每 3 小时一次)。根据您要求数据的可用性和最新程度,这可能是一个可行的解决方案。
标签: mysql sql sql-server performance linked-server