Inserisci rapidamente righe in blocco con MySQL

Immergiamoci nel mondo dell'inserimento di dati in blocco in MySQL. Immagina di essere uno sviluppatore software che sta costruendo una nuova applicazione. Hai una funzionalità fantastica che si basa su un enorme set di dati. Ma prima di lanciarla nel mondo reale, devi testare come il tuo sistema gestisce un grande volume di dati.
Qui entra in gioco l'inserimento di dati in blocco. È come un modo turbo per popolare rapidamente il tuo database con molte informazioni.
Puoi simulare scenari del mondo reale inserendo migliaia o addirittura milioni di record per vedere come il tuo database e la tua applicazione si comportano sotto pressione.
Gli inserimenti in blocco sono essenziali per valutare le prestazioni del tuo database e della tua applicazione, permettendoti di confrontare diverse configurazioni e ottimizzare la velocità.
Esploriamo alcuni esempi di scenari in cui potresti utilizzare gli inserimenti in blocco per i test:
Potresti utilizzare un inserimento in blocco per aggiungere utenti, prodotti, ordini o persino recensioni dei clienti al tuo database in una sola volta. Questo è molto più veloce rispetto all'aggiunta di ogni ordine singolarmente. Questo ti consente di testare come la tua applicazione gestisce grandi quantità di dati.
Devi popolare il tuo database con un gran numero di prodotti per testare la funzionalità di ricerca e filtraggio.
Quindi, se stai lavorando con un sistema che gestisce grandi volumi di dati, gli inserimenti in blocco sono uno strumento potente da avere nel tuo arsenale.
Nella prossima parte, esploreremo alcuni esempi specifici di come l'inserimento in blocco può essere utilizzato per testare il tuo software.
Per generare 10.000 righe di dati per la tua tabella wp_postmeta in un unico comando INSERT:
INSERT INTO wp_postmeta (post_id, meta_key, meta_value) SELECT nums.n, CONCAT('Ten Thousand Key ', CAST(nums.n AS CHAR)), CONCAT('Ten Thousand Value ', CAST(nums.n AS CHAR)) FROM ( SELECT d1.N + d2.N * 10 + d3.N * 100 + d4.N * 1000 + 1 AS n FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d1 ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d2 ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d3 ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d4 ORDER BY n ) nums;
Analizziamo passo dopo passo:
Sottoquery (
nums
): Questa sottoquery è responsabile della generazione della sequenza di numeri.- Utilizza un comando
SELECT
per combinare quattro sottoquery identiche (etichettated1
,d2
,d3
ed4
) utilizzandoUNION ALL
. - Ogni sottoquery contiene i numeri da 0 a 9.
- L'espressione
d1.N + d2.N * 10 + d3.N * 100 + d4.N * 1000 + 1 AS n
combina i valori delle quattro sottoquery per creare una sequenza di numeri da 1 a 10.000. ORDER BY n
garantisce che i numeri siano generati in ordine crescente.
- Utilizza un comando
Query principale: Questo è il comando
INSERT INTO
.- Utilizza il comando
SELECT
per specificare i dati da inserire. post_id
: La variabilenums.n
(che contiene i numeri generati) è utilizzata direttamente comepost_id
.meta_key
: L'espressioneCONCAT('Chiave Diecimila ', CAST(nums.n AS CHAR))
genera una chiave unica per ogni riga.meta_value
: L'espressioneCONCAT('Valore Diecimila ', CAST(nums.n AS CHAR))
crea un valore unico per ogni riga.
- Utilizza il comando
Dati prodotti: La query inserirà 10.000 righe nella tabella wp_postmeta
. Ogni riga avrà:
post_id
: Un numero da 1 a 10.000.meta_key
: Una chiave unica come "Chiave Diecimila 1", "Chiave Diecimila 2", ecc.meta_value
: Un valore unico come "Valore Diecimila 1", "Valore Diecimila 2", ecc.
Questa query MySQL può essere utilizzata per diecimila righe, ma per inserimenti di dati più grandi è necessario avanzare nell'approccio alla generazione dei dati.
La seguente query MySQL è un modo ingegnoso per generare un milione di righe di dati per la tua tabella wp_postmeta
utilizzando variabili definite dall'utente e una serie di operazioni CROSS JOIN
.
INSERT INTO wp_postmeta (post_id, meta_key, meta_value) SELECT (@rn := @rn + 1) as rn, CONCAT('One Million Key ', CAST(@rn AS CHAR)), CONCAT('One Million Value ', CAST(@rn AS CHAR)) FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d1 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d2 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d3 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d4 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d5 CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d6 CROSS JOIN (SELECT @rn := 0) params
Analizziamo questa estesa query MySQL:
-
Variabile definita dall'utente (
@rn
):- La query introduce una variabile definita dall'utente chiamata
@rn
. Questa variabile viene utilizzata per tenere traccia del numero di riga mentre generiamo i dati. - Inizializzazione: La variabile è inizializzata a 0 nell'ultimo comando
SELECT
:(SELECT @rn := 0) params
.
- La query introduce una variabile definita dall'utente chiamata
-
CROSS JOIN
:- La query utilizza sei operazioni
CROSS JOIN
per generare un gran numero di righe. - Ogni
CROSS JOIN
combina i risultati di due tabelle. In questo caso, stiamo utilizzando sei sottoquery identiche (etichettated1
ad6
) contenenti i numeri da 0 a 9. - Ogni
CROSS JOIN
moltiplica il numero di righe per 10. Poiché abbiamo sei operazioniCROSS JOIN
, il numero totale di righe generate è 10 * 10 * 10 * 10 * 10 * 10 = 1.000.000.
- La query utilizza sei operazioni
-
Comando
SELECT
:- Il comando
SELECT
recupera i seguenti dati per ogni riga:(@rn := @rn + 1) as rn
: Questa espressione incrementa la variabile@rn
di 1 per ogni riga, creando effettivamente un numero di riga. La clausolaas rn
assegna al numero di riga generato l'aliasrn
.CONCAT('Chiave Un Milione ', CAST(@rn AS CHAR))
: Questa espressione genera una chiave unica per ogni riga. Combina la stringa "Chiave Un Milione " con il numero di riga corrente (@rn
) convertito in un carattere.CONCAT('Valore Un Milione ', CAST(@rn AS CHAR))
: Questa espressione genera un valore unico per ogni riga. Combina la stringa "Valore Un Milione " con il numero di riga corrente (@rn
) convertito in un carattere.
- Il comando
Dati prodotti:
- La query inserirà un milione di righe nella tabella
wp_postmeta
. Ogni riga avrà:post_id
: Un numero di riga da 1 a 1.000.000.meta_key
: Una chiave unica come "Chiave Un Milione 1", "Chiave Un Milione 2", ecc.meta_value
: Un valore unico come "Valore Un Milione 1", "Valore Un Milione 2", ecc.
Punti chiave:
- Le variabili definite dall'utente sono strumenti potenti per la manipolazione dei dati all'interno di una query.
CROSS JOIN
è un ottimo modo per generare un gran numero di righe combinando più tabelle o sottoquery.- Questo metodo è più efficiente rispetto all'utilizzo di operazioni
UNION ALL
nidificate per generare un gran numero di righe.
Questa query dimostra un approccio intelligente ed efficiente per generare una massiccia quantità di dati di test per il tuo database.
Parole chiave: Inserimento in blocco MySQL,Inserimento di grandi dati MySQL,Inserisci più righe MySQL,Migliori pratiche di inserimento in blocco MySQL,Genera dati di test MySQL,Inserisci molte righe MySQL in modo efficiente,CROSS JOIN MySQL per la generazione di dati,Esempi di inserimento in blocco MySQL,Inserimento batch in MySQL,Tecniche di generazione dati MySQL