MySQL count(*)優化

待優化表信息:

配置 字段數 記錄數 引擎 有無索引
4CPU-16GRAM 27 1719647 InnoDB
1CPU-1GRAM 27 1719647 InnoDB

無WHERE的COUNT(*)優化

>>> SELECT COUNT(*) FROM table_name

用上面的sql查詢所有記錄條數的時候發現速度非常慢,約30+s

>>> EXPLAIN SELECT COUNT(*) FROM table_name

在這裏插入圖片描述

  • 首先將主鍵長度設置爲32,並新建一個索引

在這裏插入圖片描述
在這裏插入圖片描述
查詢速度降至7.494s

  • 再次進行優化,添加一個自增的主鍵列,用它進行索引

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
查詢速度降至0.410s

來一個對比

配置 記錄數 字段數 原始速度 第一次優化 第二次優化
4CPU-16GRAM 1719647 27 5.351s 0.342s 0.311s
1CPU-1GRAM 1719647 27 34.239s 7.494s 0.410s

有WHERE的COUNT(*)優化

>>> SELECT COUNT(*) FROM table_name WHERE DAY(update_date) = 25 AND MONTH(update_date) = 3 AND YEAR(update_date) = 2020;

添加自增主鍵後,count(*)的速度有了大幅提升,但是在某個字段上的速度還是非常慢,約40s
在這裏插入圖片描述
給update_date添加索引後
在這裏插入圖片描述
速度下降至0.5s
在這裏插入圖片描述
來一個對比

配置 記錄數 字段數 原始速度 優化
4CPU-16GRAM 1719647 27 0.605s 0.386s
1CPU-1GRAM 1719647 27 39.384s 0.464s
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章