我正在使用下面的查询,当我每页运行一次此查询时没有问题,但需要在单个页面上调用大约30次以上的值略有不同,有时它运行正常,有时页面运行从不加载,有时我得到“服务器已经消失”错误,http://dev.mysql.com/doc/refman/5.0/en/gone-away.html
这是一个性能问题,我是否需要将此查询分解为更小的问题(甚至会产生任何影响),还是我还能做其他事情?
SELECT normalmtm.id, normalmtm.amt, normalmtm.lockexpire, ptassumptions.id, ptassumptions.zero, ptassumptions.beta, ptdata.id, ptdata.date
FROM normalmtm
INNER JOIN ptdata ON ptdata.date = normalmtm.lockdate
INNER JOIN program ON program.clientcode = '1' AND program.clientprogram = normalmtm.program AND program.normalprogram = 'program'
INNER JOIN ptassumptions ON ptassumptions.clientcode = '1' AND ptassumptions.program = program.normalprogram
INNER JOIN purpose ON purpose.clientcode = '1' AND purpose.clientpurpose = normalmtm.purpose AND purpose.normalpurpose = ptassumptions.purpose
INNER JOIN status ON status.clientcode = '1' AND status.clientstatus = normalmtm.stage AND status.normalstatus = ptassumptions.status
WHERE normalmtm.clientcode = '1'
GROUP BY normalmtm.id
normalmtm表有几千行,其他表是较小的规范化表,大约有100行
修改
它是在本地Windows机器上运行的WAMP服务器,Apache版本:2.2.11,PHP版本:5.3.0,MySQL版本:5.1.36
答案 0 :(得分:2)
你有适当的索引吗?如果你只获得了你提到的记录数,那么这个查询应该在jiffy中运行。
答案 1 :(得分:0)
看起来你已经找到了答案。
创建连接和向DBMS发出查询需要多长时间?启动查询和获取错误消息需要多长时间? wait_timeout的值是什么?
normalmtm表有几千行,其他表是较小的规范化表,大约有100行
因此,假设数据库已规范化(基于时间的连接!!!! ?????)并且查询正确写入,查询应处理0到1000 x 100 x 100 x 100 x 100 x 100之间的内容行(后者是一个相当大的数字)。
听起来你需要查看索引。