重複の可能性:
Count(*)とCount(1)
テーブルがある場合、「id」が主キーである場合、これら2つのコマンドのパフォーマンスは異なりますか?
select count(*) from t;
select count(id) from t;
ありがとう
重複の可能性:
Count(*)とCount(1)
テーブルがある場合、「id」が主キーである場合、これら2つのコマンドのパフォーマンスは異なりますか?
select count(*) from t;
select count(id) from t;
ありがとう
いいえ、Oracleが引き継ぎ、次の場合に最速の方法を取りますcount(*)
これらは同じパフォーマンスになります。ほとんどのデータベースでは、count()によってテーブルまたは使用可能なインデックスがスキャンされます。テーブルの代わりにインデックスを使用するかどうかは、クエリオプティマイザのみに依存します。オプティマイザがインデックスを使用するのに十分賢い場合は、どちらの場合も十分賢いはずです。
使用可能なメタデータテーブルを使用すると、count()クエリを使用するよりも、テーブル内の行数をはるかに効率的に取得できることがよくあります。
idが主キーの場合、count(*)とcount(id)の両方が意味的に同等であると思います。
しかし、読者にとって count(id)
は、idがnullではないすべての行をカウントする意図を意味します。混乱を避けるために、私はむしろcount(*)を使用したいと思います。