Mysql count 的多種使用方式效能比較

2021-10-08 15:28:07 字數 947 閱讀 9575

mysql的count函式用於統計符合條件的記錄數,常用的方式有:

1、count(*

)2、count(1

)3、count

(id)

4、count

(col)

首先需要明確一點:count函式對於返回的結果集,一行行地判斷,不會統計null值。

初學者經常會糾結到底應該使用哪種方式做計數,實際上這四種計數方式是有很大差別的。

count()的原理:

count(*)

遍歷整張表,不需要取出資料來計算,直接按行累計。

count(1)

遍歷整張表,不需要取數,按行計數。

count(id)

遍歷整張表,取出id,按行計數。

count(col)

遍歷整張表,取出col,如果字段定義不為null,取出col之後,按行計數。如果字段定義可以為null,迴圈對col進行判斷是否為null值,再計數。

這四種計數方式遍歷整張表的方式也有不同:

count(*)

會找任意較小的索引遍歷,如果沒有二級索引,就會直接遍歷主鍵索引,因為主鍵索引包含了全表資料,所以在字段比較大的時候,可能會需要頻繁去磁碟取資料,導致count() 效率低,耗時長,結局方案是給乙個小字段加個二級索引,這樣count() 的時候就會遍歷這個二級索引,快速進行計數。

count(1)

使用索引遍歷的選擇和 count(*)一致。

count(id)

使用主鍵索引遍歷

count(col)

如果col建立了二級索引,則會遍歷二級索引,否則主鍵索引

所以,效能上排序為:count(*) > count(1) > count(id) > count(col)。

在不考慮是否對null計數得區別的前提下,效能優化的方向,除了使用count(*) 外,就是適當使用小的二級索引。

MySQL COUNT語句的索引使用

我們先準備好測試資料 create table user test count id int primary keynot null auto increment name varchar 45 age int email varchar 60 birthday date engine innodb...

mysql count 幾種寫法時間的比較

mysql 資料庫有一張表,資料量是6800w條,現在使用count 對資料進行統計 1.首先看下mysql的表結構 create table business dict url id int 11 not null auto increment,company name varchar 100 d...

百萬行mysql,count 函式的思考與總結

如果你的需要是統計總行數時,為什麼要使用count 而避免使用指定具體的列名?count 函式裡面的引數是列名的的時候,那麼會計算這個欄位有值項的次數。也就是,該欄位沒有值的項並不會進入計算範圍 就是網上常說的值為null的項不納入統計 很多地方都有類似表述 count column counts ...