High Performance MySQLメモ:count
1559 ワード
SQLでcount()を使うのはとても自然なことのようです。
Chapter 6:Query Perfomance Optimizationでは専門的にcountを話しました。
count:このcolumn上のNULLでない行数だけ計算されます。この挙動は他の凝集関数と同じです。(SUMはNULLの行を無視します。)
count(*):つまり、統計の行数です。
count()には表現が入れられます。
count(NULL)=0で、他のNULLではない表現は全部1になります。
また、MyISAMエンジンの実行速度についても説明した。
MyISAMエンジン内部に表の正確な行数が格納されているので、count(*)の場合は他の選別可能な行の条件を持たずに、直接にエンジンから与えられた数値を使用します。
SELECT COUNT(*) FROM TABLE_NAME;
count(*)と単独のcountの違いは、後者の方が効率がいいのではないかと思ったことがありますが、ずっと追及していません。Chapter 6:Query Perfomance Optimizationでは専門的にcountを話しました。
count:このcolumn上のNULLでない行数だけ計算されます。この挙動は他の凝集関数と同じです。(SUMはNULLの行を無視します。)
count(*):つまり、統計の行数です。
count()には表現が入れられます。
SELECT COUNT(IF(hbase_app_id is NULL, 1, NULL)) FROM im_task;
このときcountで得られたのは、この列のnullの行数です。もう一つの文の例のようです。SELECT COUNT(color = 'blue' OR NULL) AS blue, COUNT(color = 'red' OR NULL) AS red FROM items;
注意:count(NULL)=0で、他のNULLではない表現は全部1になります。
(SELECT 'COUNT(0)' AS count_type, COUNT(0) as value)
UNION
(SELECT 'COUNT(1)', COUNT(1))
UNION
(SELECT 'COUNT(NULL)', COUNT(NULL))
戻りの結果は以下の通りです。count_type, value
COUNT(0), 1
COUNT(1), 1
COUNT(NULL), 0
また、MyISAMエンジンの実行速度についても説明した。
MyISAMエンジン内部に表の正確な行数が格納されているので、count(*)の場合は他の選別可能な行の条件を持たずに、直接にエンジンから与えられた数値を使用します。