3/04/2012

星期日, 3月 04, 2012
最近茶米在開發 PHP + MySQL 的案子時,因為有些複雜的查詢必須使用多個資料表之間的關聯,並有統計的動作。此時在 MySQL 的 SQL 敘述句中就必須要使用到 LEFT JOIN 與統計指令,有統計指令就必須還要加上 GROUP BY 的指令。
問題來了,當資料量少時,客戶並沒有什麼感覺。但累積到一定的資料量時,在開啟頁面顯示資料時就十分的緩慢,並且也造成了主機的負擔。以 5000 筆左右的查詢結果,竟然要花到 14 秒以上,這會讓使用者感到系統是否有問題,或是程式是否有誤。

茶米查詢了一些網頁的資料並且進行實作,再把茶米的解決的方法整理如下,如果您也遇到這樣的問題,可以依據以下的方式來解決:
檢查相關聯的資料表,是否使用相同的儲存引擎。例如一個使用 MyISAM,另一個使用 InnoDB,會造成關聯後顯示的速度。
將關鍵的資料表使用的欄位設為索引鍵,例如二個資料表中使用編號欄位為關聯鍵,檢查二方資料表是否都對於該欄位建立索引。(這個最有效)
選取的欄位若為文字欄位,也可加入索引。
如此即可改善查詢的效率。

相關網址:

http://www.cnblogs.com/arlen/archive/2007/11/01/946250.html
http://www.lslnet.com/linux/f/docs1/i31/big5242479.htm

0 意見 :

張貼留言