この記事では主に MySQL の最適化の概要、つまりクエリの総数について簡単なテストと比較を行っています。必要な方はぜひ参考にしてください。
1、COUNT(*)、COUNT(COL)
COUNT(*)は通常主キーのインデックススキャンを行いますが、COUNT(COL)は必ずしも一致するとは限りません。統計表の項目 合計レコード数。COL と一致する計算表内のレコードの数です。違いはあります。
MyISAM テーブルの最適化の概要:
1. どのような状況でも SELECT COUNT(*) FROM tablename が最良の選択です。
2. SELECT COUNT(*) FROM tablename = '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-一百万条的查询时间 select count(*) from student ; #0.789-一百万条的查询时间 select count(id) from student; #1.011-一百万条的查询时间 select count(name) from student; #1.162-一百万条的查询时间 SELECT COUNT(*) FROM student WHERE namelike '%xiaoli%';#默认用主键索引查询,但是加上like条件后索引失效
一般に、COUNT(id) を使用する方が高速です。参考までに、以下に簡単な比較を示します。
関連する推奨事項:
mysql 最適化のための IN から INNER JOIN への共有の例
一般的に使用される mysql 最適化 SQL ステートメント クエリ メソッドの概要
以上がMySQL 最適化の概要 - クエリの合計数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。