MySQL 有幾個很詭異的地方

最近一直在那悶 , 為何 MySQL 在某些地方特別慢

舉例

1. 執行 SELECT count( ... ) WHERE .... 這種命令 , 會非常慢

2. 執行 SELECT ..... ORDER BY key1,key2 這種命令 , 會非常慢

以上兩種應用情況會發生在資料筆數很多(超過百萬筆)的時候發生 , 在我現任職的公司機器上有 8G RAM 的情況下 , 各種 buffer 調很高一樣慢

由於公司是經營論壇 , 其實在資料的正確性上若不是一定要百分百正確 , 其實仔細研究一下 Discuz , Discuz 用了很多取巧的方式

例如我們要計算某個討論版有多少主題 , 如果真的去 SELECT count() ... ,那真的會掛掉 , Discuz 的做法是 , 在表格 cdb_forums 中有另外一個欄位記錄有多少主題數 , 而不是真的去算

而 ORDER BY 的問題 , MySQL 的文件也有提到 , 如果要以兩個欄位排序 , 其實不會用到索引 , 所以都要盡量用取巧的方式 , 讓排序只用到一個 key

最近真的改公司的程式改到很煩 , 所以先記下這些問題 , 以後在規劃資料庫結構時 , 可以特別注意

2 則評論在 MySQL 有幾個很詭異的地方.

  1. pigo兄,我試了一下您講的那個問題,並無發現select count及order by key1,key2會很慢a。
    測試的資料表中的欄位數約10個,筆數約63萬筆。
    資料庫版本5.1.47, Table的Engine是MyISAM。
     
    結果是:
    select count(1)花了,15ms。
    order by key1,key2因為慢網路頻寬的因素我只limit 10000,花了1.170 sec。
    不知道您的MySQL是兩個版本的? Engine是那一種的?
     

發佈留言