2015-11-13 36 views
5

Mam tabelę z 11 milionami wierszy w bazie danych MySQL. Jedna z kolumn to osobisty numer identyfikacyjny. Ludzie są wymienieni wiele razy w tabeli i chcę wiedzieć, ile jest unikalnych osobistych numerów identyfikacyjnych. A następnie utwórz tabelę tych unikalnych liczb. Po zliczeniu odrębnych osobistych numerów identyfikacyjnych z kolumny otrzymuję inną liczbę niż wtedy, gdy wstawiam je bezpośrednio do tabeli. Na przykład:Czy liczba (odrębna nazwa_kolumny) różni się od zliczania wierszy selekcji odrębnego zapytania?

select count(distinct person_key) from big_table; 

daje mi liczbę 4,074,890.

Wtedy, gdy próbuję utworzyć tabelę z nimi,

insert into new_table select distinct person_key from big_table; 

to tylko tworzy 2,701,875 wierszy.

(Również, jeśli mogę użyć zapytania: select count(1) from (select distinct person_key from big_table) temp; daje mi 2701875).

Wszelkie pomysły, co robię źle?

+1

Może być różny, ale tylko o 1. Ponieważ zliczanie "odrębnej kolumny" wyklucza wiersz zerowy, ale zliczanie obejmuje go. Więc nie wiadomo, co się tam dzieje. –

+0

Nie mogę też myśleć o niczym, co spowodowałoby tak dużą rozbieżność. Problem 'NULL' powinien w rzeczywistości spowodować, że' SELECT DISTINCT' będzie 1 * większy * niż 'SELECT COUNT (DISTINCT)'. – Barmar

+0

Podejrzewam, że w indeksie znajduje się pewne uszkodzenie dla 'person_key', spróbuj naprawić tabelę. – Barmar

Odpowiedz

0

COUNT (DISTINCT wyraż [wyraż ...])

Zwraca liczbę liczby wierszy z różnych niezerowe wyraż wartości

MySQL Dokumentacja powiedział. Tak więc myślę, że person_key ma Lub powtarzające się wartości