Inserta rápidamente filas en masa con MySQL

Sumergámonos en el mundo de la inserción de datos en masa en MySQL. Imagina que eres un desarrollador de software construyendo una nueva aplicación. Tienes una función fantástica que depende de un conjunto de datos masivo. Pero antes de lanzarlo al mundo real, necesitas probar cómo maneja tu sistema una gran cantidad de datos.
Aquí es donde la inserción de datos en masa resulta útil. Es como una forma turboalimentada de poblar tu base de datos con mucha información rápidamente.
Puedes simular escenarios del mundo real insertando miles o incluso millones de registros para ver cómo se desempeñan tu base de datos y tu aplicación bajo presión.
Las inserciones en masa son esenciales para evaluar el rendimiento de tu base de datos y aplicación, permitiéndote comparar diferentes configuraciones y optimizar la velocidad.
Veamos algunos ejemplos de escenarios donde podrías usar inserciones en masa para pruebas:
Puedes usar una inserción en masa para agregar usuarios, productos, pedidos o incluso reseñas de clientes a tu base de datos de una vez. Esto es mucho más rápido que agregar cada pedido individualmente. Esto te permite probar cómo maneja tu aplicación grandes cantidades de datos.
Necesitas poblar tu base de datos con un gran número de productos para probar la funcionalidad de búsqueda y filtrado.
Así que, si estás trabajando con un sistema que maneja grandes volúmenes de datos, las inserciones en masa son una herramienta poderosa que debes tener en tu caja de herramientas.
En la siguiente parte, exploraremos algunos ejemplos específicos de cómo se puede usar la inserción en masa para probar tu software.
Para generar 10,000 filas de datos para tu tabla wp_postmeta en una única declaración 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;
Desglosemos esto paso a paso:
Subconsulta (
nums
): Esta subconsulta es responsable de generar la secuencia de números.- Utiliza una declaración
SELECT
para combinar cuatro subconsultas idénticas (etiquetadas comod1
,d2
,d3
yd4
) usandoUNION ALL
. - Cada subconsulta contiene los números del 0 al 9.
- La expresión
d1.N + d2.N * 10 + d3.N * 100 + d4.N * 1000 + 1 AS n
combina los valores de las cuatro subconsultas para crear una secuencia de números del 1 al 10,000. ORDER BY n
asegura que los números se generen en orden ascendente.
- Utiliza una declaración
Consulta Principal: Esta es la declaración
INSERT INTO
.- Utiliza la declaración
SELECT
para especificar los datos que se van a insertar. post_id
: La variablenums.n
(que contiene los números generados) se utiliza directamente como elpost_id
.meta_key
: La expresiónCONCAT('Clave de Diez Mil ', CAST(nums.n AS CHAR))
genera una clave única para cada fila.meta_value
: La expresiónCONCAT('Valor de Diez Mil ', CAST(nums.n AS CHAR))
crea un valor único para cada fila.
- Utiliza la declaración
Datos Producidos: La consulta insertará 10,000 filas en la tabla wp_postmeta
. Cada fila tendrá:
post_id
: Un número del 1 al 10,000.meta_key
: Una clave única como "Clave de Diez Mil 1", "Clave de Diez Mil 2", etc.meta_value
: Un valor único como "Valor de Diez Mil 1", "Valor de Diez Mil 2", etc.
Esta consulta MySQL se puede usar para entradas de diez mil filas, pero para entradas de datos más grandes es necesario avanzar en el enfoque de generación de datos.
La siguiente consulta MySQL es una forma ingeniosa de generar un millón de filas de datos para tu tabla wp_postmeta
utilizando variables definidas por el usuario y una serie de operaciones de 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
Desglosemos esta consulta extendida de MySQL:
-
Variable Definida por el Usuario (
@rn
):- La consulta introduce una variable definida por el usuario llamada
@rn
. Esta variable se utiliza para llevar un registro del número de fila a medida que generamos datos. - Inicialización: La variable se inicializa en 0 en la última declaración
SELECT
:(SELECT @rn := 0) params
.
- La consulta introduce una variable definida por el usuario llamada
-
CROSS JOIN
:- La consulta utiliza seis operaciones de
CROSS JOIN
para generar un gran número de filas. - Cada
CROSS JOIN
combina los resultados de dos tablas. En este caso, estamos utilizando seis subconsultas idénticas (etiquetadas comod1
ad6
) que contienen los números del 0 al 9. - Cada
CROSS JOIN
multiplica el número de filas por 10. Dado que tenemos seis operaciones deCROSS JOIN
, el número total de filas generadas es 10 * 10 * 10 * 10 * 10 * 10 = 1,000,000.
- La consulta utiliza seis operaciones de
-
SELECT
Declaración:- La declaración
SELECT
recupera los siguientes datos para cada fila:(@rn := @rn + 1) as rn
: Esta expresión incrementa la variable@rn
en 1 por cada fila, creando efectivamente un número de fila. La cláusulaas rn
le da al número de fila generado el aliasrn
.CONCAT('One Million Key ', CAST(@rn AS CHAR))
: Esta expresión genera una clave única para cada fila. Combina la cadena "One Million Key " con el número de fila actual (@rn
) convertido a carácter.CONCAT('One Million Value ', CAST(@rn AS CHAR))
: Esta expresión genera un valor único para cada fila. Combina la cadena "One Million Value " con el número de fila actual (@rn
) convertido a carácter.
- La declaración
Datos Producidos:
- La consulta insertará un millón de filas en la tabla
wp_postmeta
. Cada fila tendrá:post_id
: Un número de fila del 1 al 1,000,000.meta_key
: Una clave única como "One Million Key 1", "One Million Key 2", etc.meta_value
: Un valor único como "One Million Value 1", "One Million Value 2", etc.
Puntos Clave:
- Variables Definidas por el Usuario son herramientas poderosas para manipular datos dentro de una consulta.
CROSS JOIN
es una excelente manera de generar un gran número de filas combinando múltiples tablas o subconsultas.- Este método es más eficiente que usar operaciones anidadas de
UNION ALL
para generar un gran número de filas.
Esta consulta demuestra un enfoque ingenioso y eficiente para generar una gran cantidad de datos de prueba para tu base de datos.
Palabras clave: Inserción masiva MySQL,Inserción de grandes datos en MySQL,Insertar múltiples filas MySQL,Mejores prácticas de inserción masiva MySQL,Generar datos de prueba MySQL,Insertar muchas filas en MySQL de manera eficiente,CROSS JOIN MySQL para generación de datos,Ejemplos de inserción masiva MySQL,Inserción por lotes en MySQL,Técnicas de generación de datos MySQL