2012-06-25 211 views
0
select marksymbol,round(avg(p.closerate * p.out_share),2) 
from price p 
where trandate >= '2000/06/05' and trandate <= '2012/06/22' and p.markcode='RD' 
group by marksymbol 

它在本地机器上花费0.064s与2gb内存,它花了1分钟30.38秒在服务器上。mysql简单查询需要更长的时间

我在本地机器上运行Windows。 服务器在Linux下运行MySQL。

数据库方案在两台机器上都是一样的。它们具有相同的索引和主键。

还有哪些其他因素会影响此查询的性能?

+0

你在服务器上有多少数据? –

+0

你手动安装mysql吗?或者只需键入命令并自行安装? – jcho360

+0

计算统计 – Sebas

回答

3

它们的索引是否正确,但它们的大小是否相同? Linux服务器上的表是否比测试Windows服务器上的表大得多?

有几个地方可以寻找哪些可以帮助解决问题的地方。

1:对查询本身,你解释让MySQL告诉你发生了什么。

http://dev.mysql.com/doc/refman/5.0/en/explain.html

如果您有phpMyAdmin安装比您只需点击“解释”,它会自动为你做(用漂亮的饼图),你可以找出瓶颈的方式。

2:服务器上的内存使用情况。使用命令

免费-m

的vmstat

,看看有多少内存可用。您的系统本来可以为您的查询进行昂贵的交换。

3:优化查询本身。从它的外观来看,你正在使用字符串比较来进行日期搜索。您可以利用mysql中强大的日期时间功能加速日期比较。不过,我怀疑这是你的瓶颈,所以先查看前两个选项。

+0

感谢您的回复。我会尝试你建议的解决方案。同时,我创建新表并将现有表日期复制到新表中。旧表包含180万条记录。然后,我在新表上运行相同的查询,并在8.43s中回复。我不知道我喜欢命令复制结构的原因。如果你有任何建议检查旧桌子,然后让我知道谢谢 – user1480032

+0

我的猜测是,也许该表是严重分散。试过优化表? [http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html](http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html) – leorex

+0

是优化表是解决方案。 – user1480032