実行するselect count(*) from table_name
と、行数が返されます。
何をしcount(1)
ますか?1
ここで何を意味しますか?これはcount(*)
(実行時に同じ結果を与えるので)同じですか?
回答:
COUNT関数のパラメーターは、各行に対して評価される式です。COUNT関数は、式がnull以外の値に評価される行の数を返します。(*は評価されない特別な式であり、単に行数を返します。)
式には、ALLとDISTINCTの2つの追加修飾子があります。これらは、重複が破棄されるかどうかを決定します。ALLがデフォルトであるため、例はcount(ALL 1)と同じです。つまり、重複が保持されます。
式 "1"はすべての行で非nullと評価され、重複を削除しないため、COUNT(1)は常にCOUNT(*)と同じ数を返す必要があります。
Oracleのcount(*)とcount(1)の違いは?
count(*)は、すべてのレコード、つまりすべてのセルをカウントすることを意味しますが、
count(1)は、値1の1つの疑似列を追加し、すべてのレコードのカウントを返すことを意味します
これは、
SELECT * FROM table_name and SELECT 1 FROM table_name.
もし、するなら
SELECT 1 FROM table_name
テーブルの各行に1が表示されます。したがって、はいcount(*)
、またはcount(1)
同じ結果が得られます。count(8)
count(column_name)
違いはありません。
COUNT(1)
基本的には、各行の定数値1列を数えるだけです。ここでの他のユーザーが言ったように、それは同じですCOUNT(0)
かCOUNT(42)
。任意の非NULL
値は十分です。
http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789
Oracleオプティマイザーは明らかにバグを使用していたため、選択した列と、それがインデックス内にあるかどうかによってカウントが影響を受けるため、COUNT(1)規則が導入されました。
オラクルでは、これらはまったく同じ意味を持つと思います
誰に尋ねるかにselect count(1) from random_table;
もよりselect count(*) from random_table
ますが、実行はよりも高速であると報告する人もいます。まったく同じだと主張する人もいます。
このリンクは、2つの間の速度の違いは、フルテーブルスキャンと高速フルスキャンによるものであると主張しています。