jueves, 26 de septiembre de 2013

Importar datos desde CSV

Primero debemos guardar nuestro archivo en formato CSV y las columnas separadas por ";". Una vez posicionados en el directorio donde se encuentre nuestro archivo (en el servidor):

Primero entramos a MySQL en consola, luego cargamos "use nombre_base" y

LOAD DATA INFILE 'ruta_absoluta /datos.csv'
IGNORE
INTO TABLE nombre_tabla
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(campo1, campo2, campo3);

Así, 
  1. Cargamos archivo que se encuentra en el servidor
  2. Ignoramos si hay registros que ya se encuentran almacenados (o REPLACE)
  3. Asignamos a la tabla
  4. Asignamos separador de columnas
  5. Asignamos separador de registros
  6. Ignoramos la linea uno, ésto sólo si guardamos el CSV con encabezados
  7. Asignar campos es opcional, preferentemente el archivo debe venir con el mismo orden de columnas que el que se encuentra en la tabla de destino.
  8. Si entrega un error por las keys foráneas, será necesario ejecutar antes del LOAD DATA la siguiente linea:
  • SET FOREIGN_KEY_CHECKS=0;
Referencia : ver aquí

miércoles, 25 de septiembre de 2013

Respaldar y Restaurar en MySQL

NORMAL

Respaldar BD
mysqldump -u usuario -p --verbose --extended-insert base_datos > respaldo.sql
Restaurar BD
mysql -u usuario -p base_datos < respaldo.sql

Nota: para restaurar la BD, primero debe estar creada. Esto en el caso de que se restaure a otro servidor o si se elimina para luego recuperarla.

CON COMPRESIÓN

Respaldar BD
mysqldump -u usuario -p --verbose --extended-insert base_datos | gzip > respaldo.sql.gz
Restaurar BD
gunzip < respaldo.sql.gz | mysql -u usuario -p base_datos

ESPECIALES

Respaldar tablas especificas
mysqldump -u usuario -p base_datos tabla1 tabla2 > respaldo.sql

 

Respaldar tablas especificas con compresión
mysqldump -u usuario -p base_datos tabla1 | gzip -c > respaldo.sql.gz

 

Respaldar sólo estructura de BD
 mysqldump -u usuario -p --no-data base_datos > estructura.sql

Respaldar todas las BD
 mysqldump -u usuario -p --all-databases > respaldo.sql

Respaldar BD's especificas
 mysqldump -u usuario -p --databases base1 base2 base3 > respaldo.sql

Respaldar sólo datos
 mysqldump --complete-insert --no-create-info -u root -p --opt base_datos > respaldo.sql

martes, 24 de septiembre de 2013

Mejorar velocidad en consultas MySQL

Para consultas que toman demasiado tiempo en ejecutarse, siempre en necesario optimizar lo siguiente:
  1. Examina la consulta mediante la cláusula EXPLAIN en un cliente de DB, la cuál permitirá ver cómo se explora la tabla, cómo se utilizan los indices, etc.

  2. Utiliza INDEXES en los campos que serán utilizados en las consultas, ésto es válido tanto para los campos utilizados en las búsquedas (WHERE ) y en las uniones (JOIN). 
  3. Utiliza LIMIT 1 cuando solo quieras una fila de resultado, de ésta forma se dejará de escanear resultado una vez encontrado el primero. 
  4. Evita el SELECT *, siempre especifica a que tabla corresponde cada campo, de lo contrario se esta leyendo todo la estructura de la tabla antes de ejecutar la consulta, lo cual es innecesario. Ésto es válido para todos los campos especificados en la consulta. 
  5. No esta demás mencionar que la base debe estar normalizada al inicio. ver