待優化表信息:
配置 | 字段數 | 記錄數 | 引擎 | 有無索引 |
---|---|---|---|---|
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 |