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在具有2 2gb内存的本地计算机上花费0.064s,在服务器上花费1分30.38秒。
我在本地计算机上运行Windows。服务器在Linux下运行MySQL。
两台机器上的数据库方案是相同的。它们具有相同的索引和主键。
还有哪些其他因素会影响此查询的性能?
发布于 2012-06-25 21:30:30
它们被正确地编入索引,但它们的大小是否相同?Linux服务器上的表比测试Windows服务器上的表大吗?
有几个地方可以帮助你解决这个问题。
1:对查询本身进行解释,让mysql告诉您发生了什么。
http://dev.mysql.com/doc/refman/5.0/en/explain.html
如果你已经安装了phpmyadmin,那么你只需要点击“解释”,它会自动为你做这件事(用漂亮的饼图),你可以通过这种方式识别瓶颈。
2:服务器上的内存使用情况。使用命令
免费-m
和
vmstat
查看有多少内存可用。您的系统可能正在为您的查询执行代价高昂的交换操作。
3:优化查询本身。从外观上看,您正在使用字符串比较进行日期搜索。您可以利用mysql中强大的Datetime功能来加快日期比较的速度。但是,我怀疑这是您的瓶颈,所以请先检查前两个选项。
https://stackoverflow.com/questions/11189929
复制相似问题