在单个 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
我正在尝试获取单个查询中所有列的非重复计数。考虑以下 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