MySQL 最適化の概要 - クエリエントリの合計数

MySQL 最適化の概要 - クエリエントリの合計数

1. COUNT(*) と COUNT(COL)

COUNT(*)は通常、主キーに対してインデックススキャンを実行しますが、COUNT(COL)は必ずしもそうではありません。また、前者は統計テーブル内の一致するすべてのレコードの合計数をカウントしますが、後者は計算テーブル内の一致するすべてのCOLレコードの数をカウントします。違いはあります。
MyISAM テーブルの最適化の概要:

1. SELECT COUNT(*) FROM tablename は、どのような場合でも最適な選択です。

2. SELECT COUNT(*) FROMtablename WHERE COL = 'value'; のようなクエリを減らしてみてください。

3. SELECT COUNT(COL) FROM tablename WHERE COL2 ='value' の発生を防ぎます。

2. COUNT(*) または COUNT(id)

私の理解によれば、ID が自動増分主キーである場合、その番号を計算するとすべてのフィールドの数を計算するよりも明らかにリソースの消費が少なくなるため、COUNT(id) を使用する方が高速になるはずです。しかし、MySQL クエリを高速化する方法についての同様の記事を複数見てきました。これらの記事では、主キーを直接 COUNT するのではなく、SELECT COUNT(*) を使用することを推奨しています。これはなぜでしょうか?

これは、MyISAM エンジンを使用するテーブルがエントリの総数を格納するためと思われます。WHERE がない場合、または WHERE が常に true の場合 (WHERE 1 など)、COUNT(*) はエントリの総数を直接返すことができます。

さらに、COUNT(*) が「すべてのフィールドを計算する」ことを意味しないことは明らかです。明らかに、MySQL は * を「データの一部」として解釈します。

テストデータ、単純な比較、それ以上のテストなし:

#0.817 - 100万件のレコードのクエリ時間 select count(*) from student ;
#0.789 - 100 万件のレコードのクエリ時間 select count(id) from student;
#1.011-100万件のレコードのクエリ時間 select count(name) from student;
#1.162-100万件のレコードのクエリ時間SELECT COUNT(*) FROM student WHERE namelike '%xiaoli%';#デフォルトでは、クエリには主キーインデックスが使用されますが、like条件を追加するとインデックスが無効になります

要約する

一般的に、COUNT(id) を使用する方が高速です。参考までに簡単な比較を示します。

以上が、MySQL 最適化の概要 - クエリの総数に関するこの記事の内容のすべてです。皆様のお役に立てれば幸いです。興味のある方は、サブクエリの代わりに結合を使用した MySQL の最適化、MYSQL サブクエリとネストされたクエリの最適化例の分析、MySQL のステートメント サブクエリの効率最適化スキル例などを参照してください。不足がある場合は、メッセージを残して指摘してください。このサイトをサポートしてくれた友人たちに感謝します!

以下もご興味があるかもしれません:
  • MYSQL設定パラメータの最適化の詳細な説明
  • MySQL は SQL ステートメントの最新のレコードをクエリします (最適化)
  • MySQL数千万の大規模データに対する30のSQLクエリ最適化テクニックの詳細な説明
  • 時間に基づいて日付をクエリするためのMySQL最適化テクニック
  • MYSQL クエリの効率を向上させる 10 の SQL ステートメント最適化テクニック
  • MySQL 百万レベルのデータページングクエリ最適化ソリューション
  • 数千万のデータを扱うMySQLのページングクエリのパフォーマンスを最適化する
  • MYSQL開発パフォーマンス調査:バッチデータ挿入の最適化方法
  • MySQL の基本ステートメントを最適化するための 10 の原則の概要
  • MySQL 最適化戦略 (推奨)

<<:  jsはシングルクリックでテーブルを変更することを実装します

>>:  docker で php+nginx+swoole+mysql+redis 環境を構築する方法

推薦する

ウェブページの右下隅に「いいね!」カード効果を実現するための CSS (サンプルコード)

効果 HTML を実装するには、まずクリーンな HTML ページを準備し、ノードを記述します。 &l...

CentOSにPHP+Apache+MySQLのサーバー環境をインストールして構築する

Yum (フルネームは Yellow dog Updater, Modified) は、Fedora...

dockerfile における ENTRYPOINT と CMD の組み合わせと違い

前回の記事【dockerコンテナのためのdockerfileを詳しく解説】では、dockerfile...

Vue のドロップダウン ボックスのセカンダリ リンク効果を実装するためのサンプル コード

1. 成果を達成する 2. バックエンドから返されるデータ形式 「リスト」: [ { "i...

MySQL で時刻と日付の型を保存する際の選択問題を分析する

一般的なアプリケーションでは、timestamp、datetime、int 型を使用して時間形式を保...

JavaScript でオブジェクトをトラバースする 5 つの方法 サンプルコード

目次準備する5つの武器…のためにオブジェクト.キーオブジェクト.getOwnPropertyName...

Windows で mysql5.7.21 をインストールするための詳細なチュートリアル

この記事では、参考までにMySQL 5.7.21のインストールチュートリアルを紹介します。具体的な内...

単一行関数と文字計算日付プロセス制御を説明する MySQL の例

目次1. キャラクター機能1. ケースコントロール機能2. キャラクターコントロール機能2. 数学関...

CSSカスケーディングメカニズムについての簡単な説明

CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...

WAMPにインストールするとMySQLが起動できるが、再起動後に起動できなくなる問題の解決方法

初めてwampをインストールした後、すべてのサービスが正常に使用できますが、再起動するとwampのア...

MySQLのMVCCマルチバージョン同時実行制御の実装

1 MVCCとは何かMVCC の正式名称は、マルチバージョン同時実行制御です。データベースへの同時ア...

JS WebSocket 切断理由とハートビートの仕組みの詳しい説明

1. 切断理由WebSocket が切断される理由は多数あります。WebSocket が切断されたと...

MySQLトランザクションの特徴と分離レベルについてお話ししましょう

インターネットにはすでにこの種の記事が溢れていますが、私がこれをまだ書いている理由は単純です。それは...

Reactにおける不変値の説明

目次不変の値とは何ですか?不変の値を使用するのはなぜですか? Reactのパフォーマンス最適化は不変...

MySQL の制限使用法とページングクエリステートメントのパフォーマンス分析の詳細な説明

使用制限クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要が...