ホームページ >データベース >mysql チュートリアル >MySQL 最適化の選択カウント効率

MySQL 最適化の選択カウント効率

高洛峰
高洛峰オリジナル
2016-12-02 14:35:081400ブラウズ

1. どのような状況でも SELECT COUNT(*) FROM tablename が最良の選択です。

2. SELECT COUNT(*) FROM tablename = 'value'; のようなクエリを減らすようにしてください。 ) FROM テーブル名オカレンス。

COUNT(*) と COUNT(COL)

ネットで検索すると、さまざまな意見が見つかりました。

例えば、COUNT(COL) は COUNT(*) よりも速いと考えられています。その COUNT(*) COUNT(COL) よりも速いです

これは実際には性格によると友人もとても面白いと言っています。

WHERE 制限がなければ、COUNT(*) と COUNT(COL) は基本的に同等であると見なされます

ただし、WHERE 制限がある場合、COUNT(*) は COUNT(COL) よりも優れています ) 特定のデータは非常に高速です。参照は次のとおりです:

mysql> SELECT COUNT(*) FROM cdb_posts where fid = 604;

+————+

|

+—— ——+

|

+————+

セット内の 1 行 (0.03 秒)

mysql> SELECT COUNT(tid) FROM cdb_posts where fid = 604;

+————+

|

+————+

| 79000 |

+————+

セット内の 1 行 (0.33 秒)

mysql> fid = 604;

+ ————+

| COUNT(pid) |

+————+

| 79000 |

+————+

1 行 (0.33 秒)

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

COUNT中のWHERE

簡単に言うと、COUNTの際、WHERE制限がない場合、MySQLは保存された総行数を直接返します

しかし、WHERE制限がある場合、MySQLは常に完全なテーブルトラバーサルである必要があります。

最適化の概要:

1. どのような状況でも SELECT COUNT(*) FROM tablename が最良の選択です。

2. SELECT COUNT(*) FROM tablename = 'value'; のようなクエリを減らすようにしてください。 .SELECT COUNT(COL) FROM tablename の発生を防ぎます。

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