在单个 MySQL 查询中获取所有列的非重复计数

Fetch distinct count of all columns in a single MySQL query

我正在尝试获取单个查询中所有列的非重复计数。考虑以下 table.

COL1 | COL2 | COL3
A    | 5    | C
B    | 5    | C
C    | 5    | C
C    | 5    | C
D    | 7    | C

预期结果

DC_COL1 | DC_COL2 | DC_COL3     #DC - Distinct count
4       | 2       | 1

虽然使用有效分组函数无法在单个查询(单次完整 table 扫描)中实现(AFAIK)上述结果,但可以在此处进行哪些优化?

对每一列触发单独的查询可能会导致对每一列进行全面 table 扫描。虽然整个 table 可能在第一列的非重复计数查询期间进入缓冲池,但它仍然是大型 tables 上的性能问题。

单次 table 扫描即可完成:

SELECT 
  COUNT(DISTINCT COL1) DC_COL1,
  COUNT(DISTINCT COL2) DC_COL2,
  COUNT(DISTINCT COL3) DC_COL3
FROM tablename