2010年11月17日 星期三

Mysql中count(*),DISTINCT的使用方法和效率研究

在處理一個大數據量數據庫的時候
突然發現mysql對於count(*)的不同處理會造成不同的結果

比如執行
SELECT count(*) FROM tablename
即使對於千萬級別的數據mysql也能非常迅速的返回結果
而對於
SELECT count(*) FROM tablename WHERE…..
mysql的查詢時間開始攀升

仔細查閱累下手冊,發現當沒有WHERE語句對於整個mysql的表進行count運算的時候
MyISAM類型的表中保存有總的行數,而當添加有WHERE限定語句的時候Mysql需要對整個表進行檢索
從而得出count的數值

突然又想起來看到的不少新興的php程序對於count的處理並沒有很好的意識到這點
記錄下

順便提下mysql的DISTINCT的關鍵字有很多你想不到的用處