2012-06-25 208 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