MySQL聚合异常

gbn*_*gbn 5 mysql aggregate

我正在检查索引的某些列的选择性。
这种“忽略我给你的”行为记录在哪里?

这给出了 4,851,908、4,841,060 和 1,000,052

SELECT
     COUNT(*), 
     COUNT(DISTINCT Col1), COUNT(DISTINCT Col2)
FROM Sometable;
Run Code Online (Sandbox Code Playgroud)

根据 MySQL 扩展,这提供了 4,843,634 个唯一对

SELECT COUNT(DISTINCT Col1, Col2) FROM Sometable
Run Code Online (Sandbox Code Playgroud)

以下是错误的:无论任何填充列或表达式顺序如何,单个 COUNT(DISTINCT colx) 都给出 4,843,634 唯一对计数。

我预期COUNT(DISTINCT Col1) = 4,841,060,和COUNT(DISTINCT Col1) = 1,000,052

SELECT COUNT(DISTINCT Col1), COUNT(DISTINCT Col2) FROM Sometable

SELECT COUNT(DISTINCT Col2), COUNT(DISTINCT Col1) FROM Sometable

SELECT COUNT(DISTINCT Col1), 1 AS Filler, COUNT(DISTINCT Col2) FROM Sometable
Run Code Online (Sandbox Code Playgroud)

但这再次给出了另一个聚合的正确值(COUNT(*)如上)

SELECT COUNT(DISTINCT Col1), MAX(col1) AS Filler, COUNT(DISTINCT Col2) FROM Sometable
Run Code Online (Sandbox Code Playgroud)

问题,如果不清楚:

  • 为什么COUNT(DISTINCT Col1), COUNT(DISTINCT Col2)表现得像COUNT(DISTINCT Col1, Col2)
  • 为什么需要另一个聚合才能使其工作?

Jac*_*las 7

看起来您遇到了这个回归错误:

select count(distinct N1), count(distinct N2) from test.AA”工作不正确
......
“当存在唯一索引时会发生此错误”

建议的解决方法之一是使用sql_buffer_result