2017-01-09 5 views
4

У меня есть большая таблица в mysql.It имеет 13 миллионов строк.Почему mysql select count (distinct user_id) возвращает неверный номер?

Версия Mysql - 5.7.10.

Структура таблицы, как показано ниже:

create table table_name ( 
    user_id varchar(20) not null,  
    item_id varchar(20) not null 
); 

1. Первый SQL является:

select count(distinct user_id) from table; 

Результат: 760.000

2. Второй SQL является:

select count(1) from (select user_id from table group by user_id) a; 

Результат: 120.000

идентификатор_пользователя не является нулевым для каждой строки.

И, правильный номер - 120 000. Почему первый sql получает неправильный номер?

Затем я запускаю первый sql в улье и spark-sql, результатом является 120 000.

Итак, это ошибка mysql или что-то может быть установлено, чтобы все исправить?

Спасибо!

Обновление: Я пробую это на другом ПК, результат первого sql составляет 120 000. В этот раз получите правильный номер. Версия для MySql - 5.6.26. Итак, может быть, это ошибка 5.7.10.

+2

Там было 1-2 из этих ошибок в прошлом, [например, этот]] (http://bugs.mysql.com/bug.php?id=70038). Возможно, еще один пример подобной ошибки и/или регрессии? –

+0

MyISAM или InnoDB ?? – Strawberry

+0

Оба они попробовали. Сначала это InnoDB, затем я перехожу к MyISAM. Результат первого sql всегда неверен. –

ответ

0

несколько известных ошибок в MySQL подсчитываются, когда столбец включен в двухстоечный уникальный ключ.

here и here