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