COUNT 是 MySQL 中的一个聚合函数,用于计算表中某列的行数。当需要对去重后的数据进行计数时,可以使用 COUNT(DISTINCT column_name)。
COUNT(DISTINCT column_name) 能够准确地统计不重复的数据行数,避免了重复数据对统计结果的影响。GROUP BY 子句结合使用,对不同分组进行去重计数。SELECT COUNT(DISTINCT column_name) FROM table_name;SELECT column_name, COUNT(DISTINCT another_column_name) FROM table_name GROUP BY column_name;COUNT(DISTINCT column_name) 在大数据量下性能较差?原因:
COUNT(DISTINCT column_name) 需要对指定列进行去重操作,这在大数据量下会导致较高的计算复杂度和 I/O 开销。
解决方法:
column_name 上有索引,可以显著提高查询性能。假设有一个用户访问日志表 user_log,包含用户ID (user_id) 和访问时间 (visit_time) 两列,现在需要统计某个时间段内访问网站的唯一用户数。
-- 基本去重计数
SELECT COUNT(DISTINCT user_id) AS unique_users
FROM user_log
WHERE visit_time BETWEEN '2023-01-01' AND '2023-01-31';
-- 分组去重计数
SELECT DATE(visit_time) AS visit_date, COUNT(DISTINCT user_id) AS unique_users_per_day
FROM user_log
WHERE visit_time BETWEEN '2023-01-01' AND '2023-01-31'
GROUP BY visit_date;希望这些信息对你有所帮助!如果有更多问题,欢迎继续提问。