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 の発生を防ぎます。