2015-11-13 10 views
5

Ho una tabella con 11 milioni di righe in un database MySQL. Una delle colonne è un numero di identificazione personale. Le persone sono elencate numerose volte nella tabella e voglio sapere quanti numeri di identificazione personale ci sono. E quindi creare una tabella di quei numeri univoci. Quando conto i numeri identificativi personali distinti da una colonna, ottengo un numero diverso rispetto a quando li inserisco direttamente in una tabella. Ad esempio:Il conteggio (distinto nome_col) è diverso dal conteggio delle righe di una query distinta selezionata?

select count(distinct person_key) from big_table; 

mi dà un conteggio di 4.074.890.

Poi, quando cerco di creare un tavolo con loro,

insert into new_table select distinct person_key from big_table; 

Si crea solo 2,701,875 righe.

(Inoltre, se uso la query: select count(1) from (select distinct person_key from big_table) temp; mi dà 2.701.875.)

Tutte le idee che sto facendo male?

+1

Può essere diverso ma solo da 1. Poiché il conteggio di 'colonna distinta' esclude nullo ma il conteggio delle righe lo include. Quindi non chiaro cosa sta succedendo lì. –

+0

Non riesco nemmeno a pensare a qualcosa che possa causare una così grande disparità. Il problema 'NULL' dovrebbe effettivamente causare che' SELECT DISTINCT' sia 1 * più grande * di 'SELECT COUNT (DISTINCT)'. – Barmar

+0

Sospetto che ci sia qualche danno all'indice per 'person_key', prova a riparare la tabella. – Barmar

risposta

0

COUNT (espressione DISTINCT [expr ...])

restituisce un conteggio del numero di righe con diversi expr non NULL valori

MySQL Documentation detto. Quindi penso che person_key abbia NULL o valori ripetuti

Problemi correlati