大數據量表如何做快速count(*)

一個表數據量達到百萬或更高級別時間你會發現要統計表的總行數會變得越來越慢,這是爲什麼呢?

這個表的存儲引擎有關係,mysql5.7及以上版本默認的存儲引擎爲innodb,而innodb和myisam引擎有一個重要的區別就是對count()的處理上,myisam會用專門的地方存儲表的行數信息,所以在做總行數統計時比較快,而innodb是實時統計行數,每次都是對行數進行一次遍歷統計,所以innodb統計行數比較慢。慢的程度大概在1秒到十幾秒或者更高,那麼如何提高這個統計查詢的速度呢?

這裏說一個二級索引的方案,等等,大家肯定要說主鍵索引不是更好嗎,爲何要用二級索引呢?這就和主鍵索引也就是聚簇索引的結構有關係,聚簇索引是和數據一起存放的,每個葉子結點佔用的空間會大一些,因此如果統計主鍵索引就會相對慢一些。二二級索引的葉子節點只存放二級索引值和主鍵索引指針,存儲數據少,尤其是二級索引的字段內容很少時,那麼統計二級索引的數量就會快很多,因此我們只需要在表中選取一個小字段設爲索引(也就是二級索引),那麼我們再次執行count(*)時就會發現速度提升明顯,這裏要注意不需要指定條件,mysql優化器會自動選用二級索引來統計行數的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章