sql >> データベース >  >> RDS >> Sqlserver

Count(*)とCount(1)-SQL Server

    違いはありません。

    理由:

    オンラインの本は「COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

    「1」はnull以外の式であるため、COUNT(*)と同じです。 オプティマイザーは、それが何であるかを認識します:些細なことです。

    EXISTS (SELECT * ...と同じ またはEXISTS (SELECT 1 ...

    例:

    SELECT COUNT(1) FROM dbo.tab800krows
    SELECT COUNT(1),FKID FROM dbo.tab800krows GROUP BY FKID
    
    SELECT COUNT(*) FROM dbo.tab800krows
    SELECT COUNT(*),FKID FROM dbo.tab800krows GROUP BY FKID
    

    同じIO、同じ計画、作品

    編集、2011年8月

    DBA.SEに関する同様の質問。

    編集、2011年12月

    COUNT(*) ANSI-92で具体的に言及されています(「Scalar expressions 125を探してください」 ")

    ケース:

    a)COUNT(*)が指定されている場合、結果はTのカーディナリティになります。

    つまり、ANSI規格は、それがあなたの言っていることを明白に出血していると認識しています。 COUNT(1) RDBMSベンダーによって最適化されています理由 この迷信の。それ以外の場合は、ANSIに従って評価されます

    b)それ以外の場合は、TXをTの各行にを適用してnull値を削除した結果の単一列テーブルとします。 1つ以上のnull値が削除されると、完了条件が発生します:警告-



    1. MySQLデータベースへの接続

    2. ランサムウェアキャンペーンからMySQLデータベースを保護する方法

    3. SQL Serverサーバーの正規表現?

    4. 関数ラッパーなしのクエリと比較して、SQL関数は非常に遅い