我有一个大的 MySQL 表,有适当的索引等。我从远程机器运行一个简单的 select * 查询,我希望有一个大的结果集。
我的问题是,当我运行查询时,结果集返回的最大数据传输速度约为 300 KB/秒。 我创建了相同的表,并在 SQLServer Express 2008 R2 上运行相同的查询,结果以 2MBytes/秒(我的行限制)的传输速度返回。
服务器机器是 Windows Server 2008 R2 x64,四核,4GB 内存,MySQL 版本是 5.6.2 m5 64 位。我尝试在通信协议(protocol)中禁用压缩,但结果是一样的。
有人知道为什么会这样吗?
--西奥多
最佳答案
您可能会将苹果与橙子进行比较。
我会在 MySQL 服务器上运行 SELECT *,看看在没有网络额外限制的情况下,在本地服务器上检索数据的数据速率是多少。
如果这也很慢——那么这不是网络的问题。
当 MySQL 安装程序运行时,它会询问设置 MySQL 的人 MySQL 将在硬件上扮演什么角色——即开发服务器、共享服务器、专用服务器。
所有这些的区别在于 MySQL 将寻求在服务器上消耗多少内存。
最慢的设置是 Development(使用最少的内存),最快的设置是 Dedicated(尝试使用大量内存)。您可以修改 my.ini 文件以更改 MySQL 将为自己分配多少内存,和/或谷歌“my.ini 内存”以获取更详细的说明。
MySQL 正在使用(或未使用,视情况而定)的内存会对性能产生巨大影响。
首先,检查MySQL服务器本地检索数据的速度是多少。如果它很慢,网络不是问题——检查 MySQL 的内存使用情况——最好尽可能多地给它。当然,如果它很快,那么要么是网络和/或某些数据库中间件(ODBC?),要么是用于显示数据的工具——很慢...
还有一件事——尝试 SELECT * TWICE... 为什么?第二次应该缓存部分或全部结果(同样,取决于内存)...第二次应该更快...
此外,不要忘记在更改 my.ini 文件时重新启动 MySQL(并在进行任何更改之前创建备份...)
关于mysql - 大型结果集的数据传输缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870860/