SELECT COUNT(DISTINCT id) FROM t;SELECT DISTINCT id FROM t;SELECT DISTINCT id, type FROM t; 返回 (id, type) 組合去重,非單列去重SELECT id, GROUP_CONCAT(type) FROM t GROUP BY id;
SELECT id, type, COUNT(DISTINCT id) FROM t GROUP BY id;
返回 id 去重行,附帶計數列(可忽略)。
SELECT id, type FROM t GROUP BY id;
MySQL 允許非聚合列不在 GROUP BY 中(唯一值不確定),生產環境建議開啟 ONLY_FULL_GROUP_BY 避免歧義。
| 場景 | MyISAM | InnoDB |
|---|---|---|
COUNT(*) 無 WHERE | O(1) 直接讀表統計 | 全表掃描(MVCC 可見性檢查) |
COUNT(*) WHERE ... | 全表掃描 | 全表掃描 |
COUNT(col) | 掃描統計非 NULL 值 | 同左 |