In questo tutorial, impareremo come rimuovere le righe duplicate in un database MySQL per ridurre le dimensioni del database e aiutare ad aumentare le prestazioni del server.
Prima di continuare, assumiamo:
NOTA: Se hai bisogno di un database di esempio per provare i concetti forniti in questa guida, si prega di considerare il database Sakila o scaricare una copia del database utilizzato in questa guida.
Le risorse sono fornite di seguito:
Uso di base
Prima di iniziare, creeremo intenzionalmente una tabella contenente valori duplicati ai fini del test. Le query SQL per eseguire questa azione sono di seguito:
Usare il mondo;Sentiti libero di modificare la query sopra per soddisfare le tue esigenze. Dovresti anche assicurarti di creare il database (mondo) per evitare errori.
Ora, se otteniamo tutti i dati all'interno della tabella e in ordine per nome utente, vedremo i duplicati che abbiamo mostrato:
mysql> usa il mondo;Come puoi vedere dalla tabella sopra, abbiamo due valori duplicati che rendono il database più grande senza motivo e causano velocità lente.
Impariamo ora come possiamo rimuovere questi valori.
#1 - Elimina
Un modo per rimuovere le righe duplicate in un database è utilizzare l'istruzione MySQL Elimina. La query, tuttavia, utilizza ID per rimuovere i valori duplicati.
Ad esempio, per rimuovere i valori duplicati nella tabella degli utenti sopra, possiamo inserire:
Elimina Tabella 1 dalla Tabella 1 della Tabella Inner Utenti Tabella 2 dove Tabella1.id < table2.id AND table1.email = table2.email;Una volta eseguita la query sopra, rimuoverai i valori duplicati come mostrato nell'output di seguito:
MySQL> Elimina Tabella1 dalla Tabella 1 Tabella interna della Tabella 2 dove Tabella 1.id < table2.id AND table1.email = table2.email;#2 - row_number () funzione
Il secondo metodo che possiamo implementare è usare la funzione mysql row_number (). Questa funzione è supportata nella versione 8 di MySQL e superiore.
Funziona assegnando un valore INT sequenziale a ciascuna riga, con righe contenenti valori duplicati che ottengono un valore superiore a 1.
Per saperne di più su questa funzione, utilizzare la risorsa fornita di seguito:
https: // dev.mysql.com/doc/refman/8.0/en/finestra-funzione-descrizioni.html#function_row-number
Considera la query seguente che restituisce l'ID delle righe con valori duplicati:
Seleziona ID da (selezionare ID, row_number () sopra (partizione per nome utente per nome utente) come row_var dagli utenti) T1 dove row_var> 1;Una volta eseguita la query sopra, è necessario ottenere l'elenco degli ID come mostrato nell'output di seguito:
+----+Se si desidera rimuovere i valori, sostituire semplicemente l'istruzione Seleziona con l'istruzione ELETE come mostrato di seguito:
Elimina dagli utenti in cui ID in (Seleziona ID da (selezionare ID, row_number () sopra (partizione per nome utente per nome utente) come row_var dagli utenti) T1 dove row_var> 1);Infine, è possibile verificare che i valori duplicati vengano rimossi utilizzando l'istruzione SELECT.
mysql> seleziona * dall'ordine degli utenti per nome utente;Conclusione
In questo tutorial, abbiamo discusso dei due metodi per rimuovere i valori duplicati da un database. I database di grandi dimensioni, in particolare quelli di uso comune, possono contenere molti valori duplicati da importazioni esterne e altri errori. Pertanto, è necessario continuare a eliminare i valori duplicati per garantire che le applicazioni funzionino in modo ottimale.