SELECT COUNT(*)、COUNT(1)の処理速度検証1回目~3回目のまとめになります。
SELECT COUNT(*)、COUNT(1)の処理速度検証結果まとめ
対象テーブルのカラムが2つの場合
レコード件数 | SQL | 処理速度(平均) | recursive calls | consistent gets |
---|---|---|---|---|
100万 | SELECT COUNT(*) | 0.55秒 | 0 | 247 |
SELECT COUNT(1) | 0.58秒 | 4 | 312 | |
500万 | SELECT COUNT(*) | 0.94秒 | 4 | 1073 |
SELECT COUNT(1) | 1.01秒 | 0 | 989 | |
1,000万 | SELECT COUNT(*) | 1.00秒 | 0 | 1891 |
SELECT COUNT(1) | 0.97秒 | 4 | 1969 |
対象テーブルのカラムが5つの場合
レコード件数 | SQL | 処理速度(平均) | recursive calls | consistent gets |
---|---|---|---|---|
100万 | SELECT COUNT(*) | 1.45秒 | 0 | 1891 |
SELECT COUNT(1) | 1.32秒 | 4 | 1998 | |
500万 | SELECT COUNT(*) | 2.77秒 | 0 | 10118 |
SELECT COUNT(1) | 2.80秒 | 4 | 10225 | |
1,000万 | SELECT COUNT(*) | 3.22秒 | 0 | 20074 |
SELECT COUNT(1) | 4.03秒 | 4 | 20178 |
レコード件数が増えて、カラム数も増えるとSELECT COUNT(*)の方が速いという検証結果となりました。
億単位のレコードを扱っている場合はSELECT COUNT(*)を使った方が良いかと思います。
実行計画としては変わりませんが、統計は『SELECT COUNT(*)』の方が、『SELECT COUNT(1)』と比べて『recursive calls』『consistent gets』の値が少なかったので、『SELECT COUNT(*)』の方が負荷の低いSQLとなるようです。
以上です