Inserta rápidamente filas en masa con MySQL

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 como d1, d2, d3 y d4) usando UNION 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.
  • 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 variable nums.n (que contiene los números generados) se utiliza directamente como el post_id.
    • meta_key: La expresión CONCAT('Clave de Diez Mil ', CAST(nums.n AS CHAR)) genera una clave única para cada fila.
    • meta_value: La expresión CONCAT('Valor de Diez Mil ', CAST(nums.n AS CHAR)) crea un valor único para cada fila.

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.
  • 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 como d1 a d6) 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 de CROSS JOIN, el número total de filas generadas es 10 * 10 * 10 * 10 * 10 * 10 = 1,000,000.
  • 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áusula as rn le da al número de fila generado el alias rn.
      • 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.

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
Siguiente publicaciónPublicación anterior
No hay comentarios
    Añadir comentario
    comment url