目次
count 関数
テスト
count(1)
count(col)
count(id): ID をカウントします
count(indexcol): インデックス付きフィールドの統計
count(normal col): インデックスのないフィールドをカウントする
Count(1) と count(*) のトレードオフ
ホームページ データベース mysql チュートリアル MySQL の count(*)、count(1)、count(col) の違いは何ですか?

MySQL の count(*)、count(1)、count(col) の違いは何ですか?

May 26, 2023 pm 01:37 PM
mysql count(1)

    count 関数

    COUNT(式): クエリされたレコードの総数を返します。式パラメータはフィールドまたは * 記号です。

    テスト

    MySQL バージョン: 5.7.29

    ユーザー テーブルを作成し、100 万個のデータを挿入します。そのうち性別フィールドの 50 万行は null です。 of

    CREATE TABLE `users` (
      `Id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `name` varchar(32) DEFAULT NULL COMMENT '名称',
      `gender` varchar(20) DEFAULT NULL COMMENT '性别',
      `create_date` datetime DEFAULT NULL COMMENT '创建时间',
      PRIMARY KEY (`Id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户表';
    ログイン後にコピー

    count(*)

    MySQL 5.7.18 より前では、InnoDB はクラスター化インデックスをスキャンすることによってステートメントを処理していました。 SELECT COUNT(*) MySQL 5.7.18 以降、インデックスまたはオプティマイザ ヒントがオプティマイザに別のインデックスを使用するように指示しない限り、InnoDB は利用可能な最小のセカンダリ インデックスを走査することによって SELECT COUNT(*) ステートメントを処理します。セカンダリ インデックスが存在しない場合は、クラスター化インデックスがスキャンされます。
    一般的な意味は、セカンダリ インデックスがある場合はセカンダリ インデックスを使用することです。複数のセカンダリ インデックスがある場合は、コストを削減するために最小のセカンダリ インデックスが優先されます。セカンダリ インデックスがない場合は、クラスタ化インデックスを使用します。

    次のテストは、これらのビューを検証するために使用されます。

    まず、Id の主キーインデックスしかない場合に実行プランをクエリしてみると、

    MySQL の count(*)、count(1)、count(col) の違いは何ですか?

    タイプがインデックスであることがわかります。キーは PRIMARY、つまり主キー インデックスが使用されることを意味します (key_len=8)。

    次に、名前フィールドにインデックスを追加し、再度実行プランを使用して表示します。

    MySQL の count(*)、count(1)、count(col) の違いは何ですか?

    インデックスも使用されていることがわかりますが、インデックスはフィールドのインデックス名 key_len=99 を使用します。

    次に、name フィールドのインデックスを保持したまま、create_date フィールドにインデックスを追加し、実行計画を再度確認します。

    MySQL の count(*)、count(1)、count(col) の違いは何ですか?

    #今度は、 create_date フィールドには key_len=6 でインデックスが付けられます。

    上記でどのインデックスが使用されたとしても、NULL 値が含まれているかどうかに関係なく、最終的にクエリされる行の総数は 100 万行になります。

    count(1)

    count(1) は count(*) と同じクエリ結果を持ち、NULL 値が含まれているかどうかに関係なく、最終的に 100 万個のデータを返します。

    count(col)

    count(col) は特定の列の値をカウントします。これは 3 つの状況に分けられます。

    count(id): ID をカウントします

    クエリ結果は count(*) と同じで、最終的には 100 万個のデータが返されます。

    count(indexcol): インデックス付きフィールドの統計

    Use count (名前) クエリの実行計画は次のとおりです。

    MySQL の count(*)、count(1)、count(col) の違いは何ですか?

    インデックス フィールドが統計に使用され、インデックスもヒットしていることがわかります。
    列の名前フィールドを NULL に設定し、カウント クエリを実行すると、結果は 999999

    MySQL の count(*)、count(1)、count(col) の違いは何ですか?

    次に、この列の NULL 値を空に設定します。文字列を入力し、カウント クエリを実行すると、結果は 1000000

    MySQL の count(*)、count(1)、count(col) の違いは何ですか?

    を返します。つまり、インデックス フィールドを使用して行数をカウントするだけで、インデックスにヒットする可能性があります。 、NULL 値ではない行の数のみをカウントします。

    count(normal col): インデックスのないフィールドをカウントする

    インデックスのないフィールドをカウントする場合、インデックスは使用されず、NULL 値ではない行数のみがカウントされます。数えられる。

    MySQL の count(*)、count(1)、count(col) の違いは何ですか?

    Count(1) と count(*) のトレードオフ

    以前にどこで見聞きしたのかわかりませんが、count(1) count(*) よりも優れている count(*) は効率が高いというのは間違った認識で、公式サイトには InnoDB は SELECT COUNT( *) と SELECT COUNT(1) の操作を同じように処理するという記載があります。パフォーマンスに違いはありません。
    翻訳 要するに、InnoDB は SELECT COUNT(*) と SELECT COUNT(1) の操作を同じ方法で処理し、パフォーマンスに違いはありません。

    MyISAM テーブルの場合、COUNT(*) は、1 つのテーブルから取得する場合、他の列が取得されず、句がない場合に非常に早く返されるように最適化されています。この最適化は、ストレージ エンジンのため、MyISAM テーブルにのみ適用されます。正確な行数が保存され、非常に迅速にアクセスできます。 COUNT(1) は、最初の列が NOT NULL として定義されている場合にのみ、同じ最適化を実行します。 ----MySQL 公式 Web サイトより
    これらの最適化は、where や group by がないという前提に基づいています。

    Alibaba の開発仕様にも記載されています

    MySQL の count(*)、count(1)、count(col) の違いは何ですか?

    したがって、開発中に count(*) を使用できる場合は、単に count(*) を使用してください。 ##

    以上がMySQL の count(*)、count(1)、count(col) の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

    MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

    phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

    次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

    なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

    MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

    MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

    データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

    Apacheのデータベースに接続する方法 Apacheのデータベースに接続する方法 Apr 13, 2025 pm 01:03 PM

    Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

    DockerによるMySQLを開始する方法 DockerによるMySQLを開始する方法 Apr 15, 2025 pm 12:09 PM

    DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

    MySQLの役割:Webアプリケーションのデータベース MySQLの役割:Webアプリケーションのデータベース Apr 17, 2025 am 12:23 AM

    WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

    MySQLをCentos7にインストールする方法 MySQLをCentos7にインストールする方法 Apr 14, 2025 pm 08:30 PM

    MySQLをエレガントにインストールするための鍵は、公式のMySQLリポジトリを追加することです。特定の手順は次のとおりです。MYSQLの公式GPGキーをダウンロードして、フィッシング攻撃を防ぎます。 mysqlリポジトリファイルを追加:rpm -uvh https://dev.mysql.com/get/mysql80-community-rease-el7-3.noarch.rpm update yumリポジトリキャッシュ:yumアップデートインストールmysql:yumインストールmysql-server startup mysql sportin

    See all articles