2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

COUNT(*)について

Last updated at Posted at 2016-05-17

COUNT(*)について

COUNT(*)は遅いので件数取得はCOUNT(KEY)にすべきと言われたが、
前にコスト測ったら大して変わらなかった気がしたので、真面目に調べてみた。
先に結論を書くと、DB2や最近のOracleの場合、問題ない。

1.そもそもこの発言のネタ元は・・・
ネタ元はおそらく下記のサイト
http://www.geocities.jp/mickindex/database/db_optimize.html
『作成日:2002/10/25』とあるから時代錯誤な知識の可能性が高い。

2.実際はどうなのか?また、現状はどうなのか?
次にOracleのフォーラムを見ると昔はたしかにそうだったとのこと。
現在の主流のオプティマイザの種類と昔のオプティマイザの種類は異なっており、
昔は、RBO(ルールベース・オプティマイザ)を使っており、
現在は、CBO(コストベース・オプティマイザ)を基本使っている。
CBOの場合、COUNT(*)としてもコスト計算した上でよりコストの低い実行計画をDBで建ててくれるので問題ない。
ちなみに、RBOとCBOは下記のサイトの解説が詳しい。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060111/227100/

3.DB2ではどうなのか?
DB2の場合は、CBOを採用しているので、基本的にCOUNT(*)問題ない。
ただし、ALTER TABLE テーブル名 VOLATILE文とか実行されていると統計情報が無視されるので、
RBO的な動きになるので、COUNT(KEY)の方が早いかも。
VOLATILE文利用時は未検証。

ちなみに、他のTIPSも時代錯誤な知識に結構なってるらしい。
とりあえず、今回はCOUNT(*)についてのみ調べてみた次第です。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?