Cómo crear 8 millones de registros en una tabla de MySQL

Por el 8 de Diciembre de 2008

en: Sin categoría

En algunas ocasiones necesitamos recurrir a tablas con un gran número de registros para probar el rendimiento del servidor de base de datos.

Es una operación que rara vez tenemos que realizar por lo que no hay demasiada información sobre cómo crear un gran número de registros sin tener que recurrir a un lenguaje de programación.

Para hacer tests fiables sobre “tablas grandes” lo más recomendable es utilizar una tabla con un buen número de registros (más de 5.000.000 serán suficientes).

Para poder crear esta cantidad de datos sin problemas podemos hacerlo de la siguiente forma.

Creamos la tabla en la base de datos:

CREATE TABLE `t` (
`a` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Y ejecutamos esta consulta las veces que sea necesaria, con unas 23 veces será necesario ya que cada vez que se ejecuta la consulta se va multiplicando exponencialmente el número de registros y 2^23 = 8.388.608 que son suficientes registros para nuestras pruebas.

INSERT INTO t(a) VALUES(current_date);
INSERT INTO t SELECT * FROM t;

Si hemos repetido las suficientes veces la consulta tendremos 8.388.608 de registros que ocuparán aproximadamente unos 240 MB y con la que podremos experimentar con consultas simples y ver su rendimiento, y sólo habremos necesitado un minuto para crear la tabla de pruebas.

Ejemplo de prueba simple sobre nuestra nueva tabla.

SELECT count(*) FROM t WHERE a = current_date;
+----------+
| count(*)
+----------+
|  8388608
+----------+
1 row IN SET (5.23 sec)
  • Entradas relacionadas:
  • No hay coincidencias

7 Respuestas a Cómo crear 8 millones de registros en una tabla de MySQL

Avatar

AnitaHathaway

21 de Diciembre de 2008 a las 7:22 am

Dirt life. Soon, legal drugs will be sold in the market as Snickers or will Bonus to buy products :)

The mystery drug behind the arrest of Sherry Johnston, the mother-in-law to be of Alaska’s favorite pregnant teen Bristol Palin has been named, and it’s not Meth, the drug Wasilla is usually famous for.
No, this time round it’s Oxycontin.
Oxycontin is an opioid analgesic medication similar to Codeine that is used for pain relief in severe cases and for cancer patients. The drug is taken in tablet form legally (it’s available by prescription) or snorted, crushed or injected by addicts. It’s considered highly addictive and has strict controls over its distribution in many countries.
Pain killer abuse isn’t new, although experts say that Oxycontin is fast becoming the drug of choice among pain killer addicts, and it’s apparently popular with teens as well.
It’s not clear from reports whether Sherry Johnston was manufacturing the drug, just doctor shopping prescriptions and selling them on to addicts…or simply popping them all herself, but on a bright note, at least it wasn’t meth.

Bristol Palin’s Mother-in-Law To Be Arrested on Drugs Charges

Avatar

RachelSimpson

21 de Febrero de 2009 a las 5:46 am

Controversy is brewing over a New York Post cartoon that some believe ties this week’s chimp attack to President Barack Obama in a racially offensive fashion. New York Post Cartoon Controversy The cartoon, created by Sean Delonas and printed … [url=http://www.inquisitr.com/18341/new-york-post-cartoon/]Read > [/url]

:( I think that the New York Post should formally apologize to President Obama

Avatar

epplestun

9 de Diciembre de 2008 a las 11:23 am

Pues a mi al hacer el INSERT con 2 millones y pico de registros me ha dicho esto:

MySQL ha dicho: Documentación
#1206 – The total number of locks exceeds the lock table size

Avatar

epplestun

9 de Diciembre de 2008 a las 11:25 am

pues eso, despues de sacarme el fallo, el nº de registros insertados son 8,389,019

Avatar

Ttete

19 de Diciembre de 2008 a las 7:03 am

Bueno siento llevar la contraria pero esto es una barbaridad, lo primero por que crea registros de igual contenido con los cual los indices son únicos y el rendimiento es totalmente diferente a cuando los contenido registrados varían.

Lo segundo que hacer consultas así es un sin sentido ya que no tienes ningún control sobre cuantos registros haces.

existe ya funciones para comprobar el rendimiento y hacer operaciones repetitivas , además que no solo sirven para hacer ese mismo ejemplo indicando el número de veces que se repite una operación , si no que te permite ver el tiempo que tarda en ejecutarse un gran número de operaciones y así poder hacer comparaciones.

BENCHMARK(1000000, aqui la consulta )

PD: aparte de esto existen tambien las funciones y procedimientos con los que puedes crear BUCLES

Avatar

pateketrueke

9 de Diciembre de 2008 a las 12:08 am

hasta ahora, solo tenia una tabla de “continentes > paises > estados” para mis pruebas, pero con esto… 16,777,214 registros!!!

genial, lo que si me saca del cajete es por que un LIMIT 16777200,14 tarda tanto o mas que el INSERT inicial…. en fin, gracias!

Avatar

JeremyMcBacter

11 de Febrero de 2009 a las 5:47 pm

This has to be a sad sad day in history for all you pot smokers out there – well at least the men anyway. According to a story just posted on The Independent news site it … Read >

I just have to go outside and sit with the chooks for a minute . . . -]

Dejar un comentario