- 论坛徽章:
- 1
|
本帖最后由 star_in_sky 于 2012-05-25 09:29 编辑
感谢上面两位的建议,问题已经解决了。
最近两天在生产环境中,我发现MySQL查询某张数据表(table_a)的速度急剧下降(查询速度下降了80%),
所以我在内网的数据库环境中执行了类似的查询,速度非常快。
因此我开始觉得是外网的数据库的磁盘有问题,所以查询了两个数据量比较小的表(就是上面
的那个17000条数据),结果显示速度是有差距。
但是在这里,我犯了一个细微的错误:
查询外网的数据统计时间还包含了网络传输的时间;而内网中,网络传输速度极快,所以出现了
极大的速度差异(正如cenalulu说的那样,IO是瓶颈,不过这个是网络IO)。因为我使用MySQL
自带的命令行工具,没有注意这个查询时间实际上包含了网络传输时间。
正因为这个错误,给了我一个误导,一直觉得是外网计算机磁盘有问题。
之后,我把外网的table_a的数据同步到了内网数据库中,进行查询,结果却和外网一直,查询速度极慢。
这下让我知道了先前我的思路有问题;调整思路后,我检查了一下查询的SQL语句,在数据表中增加了
一个新的索引,避免了全表扫描(使用explain可以看到,谢谢duzq1985的提示)速度马上提升了。最终问题得以解决。
虽然问题已经解决,但是我对下面的一个问题还有些疑惑:
1. 其实同步table_a之前,内网的table_a中有400万条数据,未加索引,速度并没有慢到不可忍受的地步。
但是,外网的table_a的数据仅仅比内网中多100万条(没有准确查过,但是根据估计也就是这个数量级)
就让同样的查询语句效率下降了80%。是不是MySQL单表中可以容纳的数据有一定的限度,当超过400万条的
数据后就会严重影响查询效率?
我的MySQL运行在Win2003 X64+R2,版本是5.0.18, 系统内存2GB,InnoDB数据库引擎。
|
|