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:
ANSIinsert into venta (col1,col2,col3,ncol1) select col1,col2,col3,(select tn1.id from tn1 where tn1.concepto = dump.concepto) from dump
Código:
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.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)
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:
Tanto en formato ANSI como en Theta.update venta_dump objetivo left join producto fuente on objetivo.producto = fuente.nombre set objetivo.producto_id = fuente.id where 1
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:
Y este es mi hardware# 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"
Código:
Este no es ambiente de producción solo desarrollo.HDD: 5400 rpm 540Gb. RAM: 1333Mhz 8Gb. Procesador: i7 2.4 Ghz 4700MQ S.O. Win 10 Pro
Agradezco de antemano sus valiosas aportaciones