2011-02-18 148 views
0

我使用下面的查詢,當我每頁運行一次這個查詢沒有問題,但它需要被調用大約30+次,在單個頁面上稍微不同的值,有時它運行正常,有時頁面從不負載,有時我得到一個「服務器已經消失」的錯誤,http://dev.mysql.com/doc/refman/5.0/en/gone-away.htmlMYSQL錯誤,服務器已經消失?

是這是一個性能問題,我需要將這個查詢分解成更小的(這將甚至有任何影響),或有東西別的我可以做嗎?

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行

編輯

較小的規範化表的一個WAMP服務器的本地Windows機器,Apache的版本上運行:2.2.11,PHP版本:5.3.0,MySQL版本:5.1.36

+0

你有沒有想過緩存? – RobertPitt

+0

你使用的是哪個mysql客戶端?我已經看到了5.0.52客戶端的錯誤 - 一個已知問題。 – sreimer

回答

2

你有合適的索引。如果你只有你提到的記錄的數量,這個查詢應該在jiffy中運行。

+1

是的,索引造成巨大的差異,特別是在連接表格時。單表查找可以很好地工作,但沒有連接,你需要索引:) –

+0

你們是正確的,甚至沒有索引我們添加它們,當我使用「SHOW INDEX FROM tablename」它表明沒有被使用,我我在本地Windows機器上使用WAMP服務器,並且我通過單擊表結構視圖中的索引圖標來添加phpMyAdmin控制面板中的索引,我還嘗試了「ALTER TABLE」以更直接地更改它,但它仍然沒有任何作用,這是WAMP的問題,我的網絡服務器也會出現同樣的問題嗎? – ambiguousPanda

0

看起來你已經找到了答案。

創建連接並將查詢發佈到DBMS需要多長時間?開始查詢和獲取錯誤信息需要多長時間? wait_timeout的值是多少?

的normalmtm表有幾千行,而其他表較小正規化的表中有100行

因此,假設數據庫是規範化的(與聯接基於時間!!!!? )和查詢寫入正確,查詢應處理之間的東西0和1000 x 100 x 100 x 100 x 100 x 100行(後者是一個相當大的數字)。

聽起來像你需要看看你的索引。