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

在具有 2gb 内存的本地机器上花费了 0.064 秒,在服务器上花费了 1 分 30.38 秒。

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

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

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

4

1 回答 1

3

它们已正确编入索引,但它们的大小是否相同?Linux 服务器上的表是否明显大于测试 Windows 服务器上的表?

您可以寻找一些可以帮助解决问题的地方。

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

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

如果您安装了 phpmyadmin,则只需单击“解释”,它会自动为您执行此操作(带有漂亮的饼图),您可以通过这种方式识别瓶颈。

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

免费-m

vmstat

看看有多少内存可用。您的系统可能一直在为您的查询进行昂贵的交换。

3:优化查询本身。从外观上看,您正在使用字符串比较进行日期搜索。您可以利用 mysql 中强大的日期时间功能来加快日期比较。但是,我怀疑这对您来说是瓶颈,因此请先检查前两个选项。

于 2012-06-25T13:30:30.337 回答