Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Normalizar tabla de millones de registros

Estas en el tema de Normalizar tabla de millones de registros en el foro de Mysql en Foros del Web. Saludos a todos ustedes. Recientemente me he visto en la necesidad de adentrarme mas al mundo de los DBA, ya que en mi actual compañía ...
  #1 (permalink)  
Antiguo 10/10/2015, 11:37
Avatar de avalle  
Fecha de Ingreso: enero-2015
Mensajes: 4
Antigüedad: 9 años, 6 meses
Puntos: 0
Pregunta Normalizar tabla de millones de registros

Saludos a todos ustedes.

Recientemente me he visto en la necesidad de adentrarme mas al mundo de los DBA, ya que en mi actual compañía se están teniendo cambios y parte de esos cambios es migrar la información que hospeda un proveedor a nuestros propios sistemas, bajo este contexto planteo lo siguiente:

El proveedor nos proporciono historial del transacciones con un total aproximado a 7.5 millones de registros, sin embargo estos registros no vienen normalizados, de tal suerte que tengo una tabla con 7 columnas de conceptos.

Desglose 3 de 7 columnas en sus respectivas tablas, de tal forma que ya tengo indices para cada concepto de de cada columna, el problema viene cuando intento volcar la tabla "dump" a una tabla debidamente normalizada ya que los tiempos de respuesta son altisimos (llevo dos dias con una consulta ejecutandose), mediante consultas del tipo :

Theta
Código:
insert into venta (col1,col2,col3,ncol1) select col1,col2,col3,(select tn1.id from tn1 where tn1.concepto = dump.concepto) from dump
ANSI
Código:
insert into venta (col1,col2,col3,ncol1) select a.col1,a.col2,a.col3,b.col1 from dump a innert join tn1 b on (b.concepto = a.concepto)
No se realmente si es la manera correcta de normalizar una tabla con esa cantidad de registros, o si puede haber otra manera de poder lograrlo.

he cambiado el tipo de motor de base de datos entre "InnoDB" y "MyISAM" realmente no veo mucho cambio en el performance con pruebas de 100,000 registros.

También intente en lugar de volcar la tabla "dump" agregar las columnas de indice en ella y correr un update:

Código:
update venta_dump objetivo left join producto fuente on objetivo.producto = fuente.nombre set objetivo.producto_id = fuente.id where 1
Tanto en formato ANSI como en Theta.

Pero también queda volando la consulta, anticipo que con mysql workbench monitoreo el trabajo del gestor y si esta ejecutando las consultas, sin embargo requiero hacer las consultas mas rápidas, también se que depende mucho del hardware donde esta el DBMS.

Este es mi archivo de configuración.
Código:
# Generated by Percona Configuration Wizard (http://tools.percona.com/) version REL5-20120208
# Configuration name sysdev01 generated 2015-10-07 19:30:43

[mysql]

# CLIENT #
port                           = 3306
socket                         = "C:/xampp/mysql/mysql.sock"

[mysqld]

# GENERAL #
#user                           = mysql
default-storage-engine         = InnoDB
socket                         = "C:/xampp/mysql/mysql.sock"
basedir 					   = "C:/xampp/mysql"
pid-file                       = "mysql.pid"
server-id					   = -19910709
plugin_dir                     = "C:/xampp/mysql/lib/plugin/" 
skip-federated


# MyISAM #
key-buffer-size                = 64M
myisam-recover-options         = FORCE,BACKUP

# SAFETY #
max-allowed-packet             = 16M
max-connect-errors             = 1000000

# DATA STORAGE #
datadir                        = "C:/xampp/mysql/data"

# BINARY LOGGING #
log-bin                        = "mysql-bin"
expire-logs-days               = 14
sync-binlog                    = 1

# CACHES AND LIMITS #
tmp-table-size                 = 64M
max-heap-table-size            = 64M
query-cache-type               = 0
query-cache-size               = 0
max-connections                = 500
thread-cache-size              = 50
open-files-limit               = 65535
table-definition-cache         = 4096
table-open-cache               = 524288

# INNODB #
innodb-log-files-in-group      = 2
innodb-log-file-size           = 256M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table          = 1
innodb-buffer-pool-size        = 1G

# LOGGING #
log-error                      = "mysql-error.log"
log-queries-not-using-indexes  = 1
slow-query-log                 = 1
slow-query-log-file            = "mysql-slow.log"
Y este es mi hardware
Código:
HDD: 5400 rpm 540Gb.
RAM: 1333Mhz 8Gb.
Procesador: i7 2.4 Ghz 4700MQ
S.O. Win 10 Pro
Este no es ambiente de producción solo desarrollo.

Agradezco de antemano sus valiosas aportaciones
  #2 (permalink)  
Antiguo 13/10/2015, 13:30
Avatar de avalle  
Fecha de Ingreso: enero-2015
Mensajes: 4
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Normalizar tabla de millones de registros

Aqui encontre la solucion, un script realmente sencillo de utilzar, espero les sea de utilidad a aquellos con problematicas similares

http://stackoverflow.com/questions/11430362/update-column-from-another-table-in-large-mysql-db-7-million-rows

Etiquetas: insert, normalizar, select, tabla, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:22.