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

Duda optimizacion BD

Estas en el tema de Duda optimizacion BD en el foro de Mysql en Foros del Web. Hola a todos Estoy desarrollando un proyecto en el cual he de importar y darle forma a 1.500.000 registros desde un xml vía: Cita: Editado: ...
  #1 (permalink)  
Antiguo 22/01/2015, 13:07
 
Fecha de Ingreso: octubre-2011
Mensajes: 104
Antigüedad: 12 años, 6 meses
Puntos: 1
Hola a todos
Estoy desarrollando un proyecto en el cual he de importar y darle forma a 1.500.000 registros desde un xml vía:
Cita:
Editado: Codigo de programacion no permitido en foros de BBDD.
Estos registros los inserto en dos tablas diferentes T1 y T2(lectura y escritura) ambas MYIsam sin indices
con dos
Código SQL:
Ver original
  1. INSERT INTO T1....
y

Código SQL:
Ver original
  1. INSERT INTO T2....
Posteriormente copio la tabla a T1 final y T2 final (solo lectura) ambas Innodb y con indices:
Código SQL:
Ver original
  1. INSERT INTO t1 final SELECT * FROM T1 GROUP BY id
y
Código SQL:
Ver original
  1. INSERT INTO t2 final SELECT * FROM T2 GROUP BY id

Bien, el problema que tengo es que tarda muchísimo la inserción de datos.
De que manera puedo deshabilitar los indices? de que manera puedo optimizar la inserción de registros?
He probado con ALTER TABLE T1final DISABLE KEYS y no veo una mejoría en el rendimiento.
Qué indices se deshabilitan con esta sentencia. PK, unique, index, fulltext??

Un saludo gracias

Y por otra parte, cómo puedo saber el estado de los indices si están activados o desactivados?

Última edición por gnzsoloyo; 22/01/2015 a las 14:21
  #2 (permalink)  
Antiguo 22/01/2015, 14:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda optimizacion BD

A nivel de programación (OFF TOPIC en este foro), la opcion de carga por medio de un XML no es muy eficiente. Es demasiado secuencial, y toda secuencialidad es mala par cargas masivas.

La mejor solucion en ese sentido es usar LOAD DATA INFILE (ver manaul de referncia), para lo cual el usuario de MySQL utilizado debe tener permisos de FILE, y obviamente el de la aplicación permisos para subir archivos.
Esa sentencia permite cargar datos desde archivos planos TXT, o CSV, para lo cual el unico tema es cuidar el formato de los datos y el CHARSET del archivo (debe ser uTF8).

Por el laldo de los índices, la performance puede tener problemas de acuerdo a los indices que estén definidos en cada tabla, pero sin saber cómo son y cuantos tienes...

Activar/desactivar indices o constraint, son temas que puedes buscar en el manaul de referencia, como hacemos todos...
Aun así, mi sigerencia es que evalúes la posibilidad de usar el LOAD DATA.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/01/2015, 14:53
 
Fecha de Ingreso: octubre-2011
Mensajes: 104
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Duda optimizacion BD

Gracias.
Con load data el problema que tengo es que son 200 archivos que he de descargar darles nombres y buscar directorio para almacenarlos(Windows), cosa que si lo hago directamente con xml va todo automatizado. Los archivos pesados (aquillos que superen los 100.000 registros los haré vía LOAD DATA INFILE ya que no superan la decena.

Me surge una duda, a ver si hago el procedimiento correcto, descartando que utilice LOAD DATA INFILE.
1Leo el archivo xml y lo inserto con las columnas que vienen por defecto y escribo otras columnas y todo ello lo meto en una tabla1 y luego subo la tabla1 a la tabla2 final para el cliente.
Consideras que seria mejor
1 absorber xml y solo datos por defecto del xml en una tabla 1
2 De esa tablaa crear otra(tabla2) con las columnas creadaas por mi y
3 luego subir esa tabla2 a la tabla3 final de cliente?

he estado buscando y no he encontrado ningun comando para averiguar el estado de los indices para saber si estan activos o no

para habilitar y deshabilitar utilizo

ALTER TABLE table2 DISABLE KEY
SET FOREIGN_KEY_CHECKS = 0
SET AUTOCOMMIT = 0
SET UNIQUE_CHECKS = 0

y la inversa para habilitarlos, colocados al principio y al final del script
  #4 (permalink)  
Antiguo 22/01/2015, 16:14
 
Fecha de Ingreso: octubre-2011
Mensajes: 104
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Duda optimizacion BD

Me ha surgido otra duda, la tabla1 donde guardo los datos del xml y genero mis columnas, la puedo guardar en csv, nominarla y asignarle un directorio donde se guarde, sin tener problemas de seguridad en windows y sin que se abran cuadros de dialogo?

Etiquetas: arquitectura, optimización
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 09:40.