我正在检查索引的某些列的选择性。
这种“忽略我给你的”行为记录在哪里?
这给出了 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)看起来您遇到了这个回归错误:
select count(distinct N1), count(distinct N2) from test.AA”工作不正确
......
“当存在唯一索引时会发生此错误”
建议的解决方法之一是使用sql_buffer_result