获取单个MySQL查询中所有列的不同计数

获取单个MySQL查询中所有列的不同计数,mysql,count,distinct,mysql-8.0,Mysql,Count,Distinct,Mysql 8.0,我试图在一个查询中获取所有列的不同计数。考虑下表。 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 虽然使用有效的group by函数无法在单个查询(单个完整表扫描)中实现上述结果(AF

我试图在一个查询中获取所有列的不同计数。考虑下表。

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
虽然使用有效的group by函数无法在单个查询(单个完整表扫描)中实现上述结果(AFAIK),但这里可以进行哪些优化


对每一列触发单独的查询可能会导致对每一列进行完整的表扫描。虽然在第一列的distinct count查询过程中,整个表可能已到达缓冲池,但在大型表上,这仍然是一个性能问题。

可以在单个表扫描中完成:

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