count(*)在數據多的時候非常慢。
優化方法
這要從InnoDB的索引說起, InnoDB的索引是B+Tree。
對主鍵索引來說:它只有在葉子節點上存儲數據,它的key是主鍵,並且value為整條數據。
對輔助索引來說:key為建索引的列,value為主鍵。
這給我們兩個信息:
1. 根據主鍵會查到整條數據
2. 根據輔助索引只能查到主鍵,然後必須通過主鍵再查到剩余信息。
所以如果要優化count(*)操作的話,我們需要找壹個短小的列,為它建立輔助索引。
在我的例子中就是status,雖然它的”severelity”幾乎為0.
先建立索引:ALTER TABLE test1 ADD INDEX (status);
然後查詢,查詢速度提升近13倍。
參考:網頁鏈接
如果索引是str這壹列,結果又會是怎麽樣呢?
先建立索引: alter table test1 add index (str) 也很快,但是比起status這列還是有著1.5倍左右的差距。