select count() と select count(1) の違いと実行方法

select count() と select count(1) の違いと実行方法

Count(*) または Count(1) または Count([column]) は、おそらく SQL Server で最もよく使用される集計関数です。実際、多くの人はこれら 3 つを区別できません。この記事では、これら 3 つの背後にある機能、関係、原則について説明します。

過去には、パフォーマンスを向上させるために Count(*) ではなく Count(1) を使用するという、いわゆる最適化の提案をよく目にしました。その理由は、Count(*) を使用するとテーブル全体がスキャンされるからです。実際には、Count をどのように記述しても違いはありません。

Count(1) と Count(*) は、実際には Count() 内の式が NULL かどうか評価されることを意味します。NULL の場合はカウントされませんが、NULL でない場合はカウントされます。たとえば、コード 1 に示すように、Count に NULL が指定されています (オプティマイザーでは NULL を明示的に指定できないため、指定するには変数に割り当てる必要があります)。

宣言 @xx INT
SET @xx=NULL
[AdventureWorks2012].[Sales].[SalesOrderHeader] から COUNT(@xx) を選択します。

コードリスト 1. Count に NULL が指定されています。すべての行が NULL なので、結果はまったくカウントされません。当然、結果は 0 になります。

したがって、Count(*)、Count(1)、Count('anything') のいずれかを指定すると、次の図に示すように、これらの値はいずれも NULL ではないため、結果は同じになります。

Count に NULL 以外の式を指定する限り、結果は変わりません。

結果だけを見ると、 Select Count(*)Select Count(1)同じ結果を返します。

テーブルに主キーがない場合、count(1) は count(*) よりも高速です。テーブルに主キーがある場合、主キーをカウント条件として使用すると count(primary key) が最も高速になります。

テーブルにフィールドが 1 つしかない場合は、count(*) が最も高速です。

count(*) と count(1) の結果は同じで、どちらも NULL 統計が含まれますが、count(column) には NULL 統計は含まれません。

1. select 1 と select * の違い

select constant from ... すべての行に対して、常に定数という 1 つの値のみが返されます。したがって、通常は、存在するかどうかを判断するためにのみ使用されます (exists 句など)。 Select * from ... は、すべての行のすべての列を返します。

パフォーマンスの違いは、from 句と where 句によって異なります。たとえば、where 条件にインデックスを付けることができる場合、select 1 from ... の方が select * from ... よりも明らかにパフォーマンスが優れています。

2. select sum(1)の使用

select count(*)条件を満たすレコードの数を返します。これはselect sum(1)と同じです。

ただし、sum() には負の数や浮動小数点数を含む任意の数値を渡すことができ、返される値は渡された値 n * 条件を満たすレコードの数 m になります。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL における count(*)、count(1)、count(col) の違いのまとめ
  • Select count(*)、Count(1)、Count(column)の違いと実行方法
  • SQL Server における Select count(*) と Count(1) の違いと実行方法
  • count(1)、count(*)、count(列名)の実行の違いの詳細な説明

<<:  Windows 10 での Tomcat のインストールと展開に関する詳細なチュートリアル

>>:  Vue3+el-tableは行と列の変換を実現します

推薦する

デザインのヒント: きっと気に入っていただけると思います

<br />このタイトルを見ると、見覚えがあるかもしれません。多くのウェブサイトが同様の...

Brotli圧縮アルゴリズムを有効にするNginxの実装プロセスの詳細な説明

序文Web アプリケーションでは、トラフィックを節約し、転送データのサイズを縮小し、転送効率を向上さ...

Centos7 サーバーで jar パッケージ プロジェクトを開始する最良の方法

序文Linux 上で jar パッケージを実行する方法は誰もが知っています。なぜ別々に話したいのでし...

jsネイティブウォーターフォールフロープラグイン制作

この記事では、jsネイティブウォーターフォールフロープラグインの具体的なコードを参考までに共有します...

ウェブページのカスタム選択ボックス選択

選択ドロップダウン リスト フォームは誰もがよく知っているかもしれませんが、デフォルトのドロップダウ...

Vue CLI のモードと環境変数の詳細な説明

序文実際のプロジェクトの開発では、通常、プロジェクト開発フェーズ、テストフェーズ、最終オンラインフェ...

Spark SQL の 4 つの一般的なデータ ソースの詳細な説明

汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...

WeChatアプレットは左にスワイプしてリスト項目を削除する効果を実現

この記事では、WeChatミニプログラムの具体的なコードを共有し、左にスワイプしてリスト項目を削除す...

MySQL 5.5.27 インストール グラフィック チュートリアル

1. MYSQLのインストール1. ダウンロードしたMySQLインストールファイルmysql-5.5...

Linux で MySQL をインストールする簡単な方法

Linux に MySQL をインストールする方法をオンラインで検索すると、多くの方法が表示されまし...

jQueryは動的タグイベントを実装します

この記事では、タグイベントを動的に追加するためのjQueryの具体的なコードを参考までに紹介します。...

mysql 3つのテーブルを接続してビューを作成する

3 つのテーブルが接続されています。テーブル A のフィールド a はテーブル B のフィールド b...

Eclipseを使用してMySQLデータベースに接続する方法を説明します

序文常にエラーが発生するため、MySQL データベースに接続するプロセスを記録します。接続プロセス1...

Dockerコンテナでユーザーを切り替えるときに権限が不足する問題を解決する方法

Docker コンテナでユーザーを切り替えると、権限が不十分であるというメッセージが表示されます。解...

MySQL インデックスのパフォーマンス最適化の問題に対する解決策

MySQL によって作成される最適化はインデックスを追加することですが、インデックスを追加しても目的...