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

Busquedas rápidas en MySQL con bases de datos grandes

Estas en el tema de Busquedas rápidas en MySQL con bases de datos grandes en el foro de Mysql en Foros del Web. Hola! Me gustaria saber si alguien me puede echar una mano. He subido una base de datos de Access a MySQL con 15 millones de ...
  #1 (permalink)  
Antiguo 21/01/2008, 09:45
 
Fecha de Ingreso: abril-2005
Mensajes: 17
Antigüedad: 19 años
Puntos: 0
Busquedas rápidas en MySQL con bases de datos grandes

Hola!

Me gustaria saber si alguien me puede echar una mano. He subido una base de datos de Access a MySQL con 15 millones de registros separados en en 10 tablas de 1,5 millones de registros cada una. Mi problema esta en que tengo que realizar busquedas rápidas pero cada vez que hago un select de cualquiera de las tablas tarda muchisimo. ¿Podría alguien decirme dónde esta el problema? ¿Debería utilizar otra plataforma de bases de datos? ¿Hay alguna forma de optimizar las búsquedas? Muchas Gracias de antermano!!
  #2 (permalink)  
Antiguo 21/01/2008, 11:32
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Re: Busquedas rápidas en MySQL con bases de datos grandes

Cita:
Iniciado por Rodrigo1982 Ver Mensaje
Hola!

Me gustaria saber si alguien me puede echar una mano. He subido una base de datos de Access a MySQL con 15 millones de registros separados en en 10 tablas de 1,5 millones de registros cada una. Mi problema esta en que tengo que realizar busquedas rápidas pero cada vez que hago un select de cualquiera de las tablas tarda muchisimo. ¿Podría alguien decirme dónde esta el problema? ¿Debería utilizar otra plataforma de bases de datos? ¿Hay alguna forma de optimizar las búsquedas? Muchas Gracias de antermano!!
yo tengo 10 M y anda rapido.... habra que ver si has creado los indices y tus querys correctamente
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #3 (permalink)  
Antiguo 22/01/2008, 05:40
 
Fecha de Ingreso: abril-2005
Mensajes: 17
Antigüedad: 19 años
Puntos: 0
Re: Busquedas rápidas en MySQL con bases de datos grandes

gracias por tu respuesta xcars!!

He leido tambien en el foro tus comentarios sobre mysql y postgresql, yo creo que tengo un problema parecido. Te comento uno poco mas por si me puedieses echar una mano. La base de datos originalmente la tenia en access y en una sola tabla, y la he migrado a mysql dividiendola en varias tablas, no es una base de datos relacional ya que la propia base de datos es una tabla y representa una entidad en bd relacionales, las busquedas las hago sobre un solo campo y con esta estructura
"SELECT * FROM tabla WHERE campo LIKE %valor%" ya que a veces tengo que buscar dentro de un campo pero no siempre, he probado tambien sin LIKE de esta manera: "SELECT * FROM tabla WHERE campo=valor" y tambien son bastantes lentas las busquedas. Estoy un poco desesperado ya y no se si deberia cambiar de servidor de base de datos crear indices de alguna manera o que? si puedieses echarme una mano te lo agradeceria.

Un saludo
  #4 (permalink)  
Antiguo 24/01/2008, 05:24
 
Fecha de Ingreso: abril-2005
Mensajes: 17
Antigüedad: 19 años
Puntos: 0
Re: Busquedas rápidas en MySQL con bases de datos grandes

Hola nadie puedes darme una solución a mi probelma? Gracias Saludos
  #5 (permalink)  
Antiguo 24/01/2008, 19:25
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Busquedas rápidas en MySQL con bases de datos grandes

Pregunta básica...
¿Has creado índices en las tablas?
Si es así, ¿cómo los has creado?

Tablas sin índices, respuestas a SELECT lentas.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #6 (permalink)  
Antiguo 25/01/2008, 11:26
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Re: Busquedas rápidas en MySQL con bases de datos grandes

Hola, hasta ahora veo lo que respondiste, perdon por no contestar antes...
Yo lo solucione creando Fulltext search indexes en los campos correspondienes, pero para eso debes considerar si tu base es estatica, o si se modifica, cada cuanto, cuantos registros diarios, etc etc porque hay muchos factores te afectaran en rendimiento.
Ahora bien, yo tengo 10 M en una sola tabla relacionada con unas 4 mas pues pero son los datos como menos importantes para, igual con los indices bien creados y bien relacionados, obtengo respuestas en fracciones de segundo.
Te recomendaria leer un poco sobre estos indices y optimizacion de tablas, hay muchas variables a considerar, no solo de diseno de BD, sino tambien buffers, variables de conf. etc etc.
En lo que te pueda ayudar, pues estoy a las ordenes

Cita:
Iniciado por Rodrigo1982 Ver Mensaje
gracias por tu respuesta xcars!!

He leido tambien en el foro tus comentarios sobre mysql y postgresql, yo creo que tengo un problema parecido. Te comento uno poco mas por si me puedieses echar una mano. La base de datos originalmente la tenia en access y en una sola tabla, y la he migrado a mysql dividiendola en varias tablas, no es una base de datos relacional ya que la propia base de datos es una tabla y representa una entidad en bd relacionales, las busquedas las hago sobre un solo campo y con esta estructura
"SELECT * FROM tabla WHERE campo LIKE %valor%" ya que a veces tengo que buscar dentro de un campo pero no siempre, he probado tambien sin LIKE de esta manera: "SELECT * FROM tabla WHERE campo=valor" y tambien son bastantes lentas las busquedas. Estoy un poco desesperado ya y no se si deberia cambiar de servidor de base de datos crear indices de alguna manera o que? si puedieses echarme una mano te lo agradeceria.

Un saludo
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #7 (permalink)  
Antiguo 28/01/2008, 05:42
 
Fecha de Ingreso: abril-2005
Mensajes: 17
Antigüedad: 19 años
Puntos: 0
Re: Busquedas rápidas en MySQL con bases de datos grandes

Muchisimas gracias por tu respuesta xcars, estoy siguiendo tus consejos, ademas mis busquedas son sobre un campo telefono que lo tenia en VARCHAR y lo estoy cambiado a INTEGER y poniendolo como clave principal a ver como me funciona ahora. Gracias de nuevo ya te contare como me ha ido.

Saludos!
  #8 (permalink)  
Antiguo 29/01/2008, 13:45
 
Fecha de Ingreso: enero-2008
Ubicación: mexicali
Mensajes: 11
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Busquedas rápidas en MySQL con bases de datos grandes

Hola que tal buen dia .. yo estoy en la misma situacion que Rodrigo , pero yo estoy partiendo de una exportacion que s ehizo desde cobol .. y todo lo tengo muy parecido al caso de rodrigo .. tambien tengo esa lentitud en mi caso tengo 2 tablas donde

una tengo 270,000 registros ( las cuentas del usuario )
la otra tengo 11,000,000 de registros ( movientos de la cuenta )


y tambien se pone lento ...

xcars: podrias mostrarnos un ejemplo de reestructura que manejastes en tu base de datos ya que nos comentas que tienes 10 M de registros

Saludos
  #9 (permalink)  
Antiguo 30/01/2008, 08:51
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Re: Busquedas rápidas en MySQL con bases de datos grandes

pues mi tabla al final llego a esto luego de leer y leer:

Código:
CREATE TABLE `hunters` (
  `hunter_id` bigint(11) NOT NULL auto_increment,
  `hunter_fecha_ingreso` date default NULL,
  `hunter_nombre` varchar(100) default NULL,
  `hunter_fecha_nacimiento` date default NULL,
  `sexo_id` int(11) default NULL,
  `hunter_direccion` varchar(255) default NULL,
  `hunter_telefono` int(11) default NULL,
  `hunter_telefono2` char(10) default NULL,
  `patrono_id` int(11) default NULL,
  `hunter_nombre_referencia` varchar(100) default NULL,
  `hunter_direccion_referencia` varchar(255) default NULL,
  `hunter_telefono_referencia` int(11) default NULL,
  `hunter_isss` char(20) default NULL,
  `hunter_salario` decimal(11,2) default NULL,
  `hunter_dui` char(20) default NULL,
  `hunter_nit` char(20) default NULL,
  `hunter_licencia` char(20) default NULL,
  `estado_civil_id` int(11) default NULL,
  `departamento_id` int(11) default NULL,
  `municipio_id` int(11) default NULL,
  PRIMARY KEY  (`hunter_id`),
  KEY `patrono` (`patrono_id`),
  KEY `depto` (`departamento_id`),
  KEY `municipio` (`municipio_id`),
  FULLTEXT KEY `todos` (`hunter_nombre`,`hunter_direccion`,`hunter_isss`,`hunter_dui`,`hunter_nit`,`hunter_licencia`)
) ENGINE=MyISAM AUTO_INCREMENT=12272558 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
Pero en mi caso, hay que recordar que mi busqueda de info se basa en ciertos criterios, que son los que me empujaron a este diseno... lo mejor que podrias hacer es poner tu diseno tambien para ver que tienes mal, pueden ser que has creado mal los indices, etc etc

Cita:
Iniciado por rorrito Ver Mensaje
Hola que tal buen dia .. yo estoy en la misma situacion que Rodrigo , pero yo estoy partiendo de una exportacion que s ehizo desde cobol .. y todo lo tengo muy parecido al caso de rodrigo .. tambien tengo esa lentitud en mi caso tengo 2 tablas donde

una tengo 270,000 registros ( las cuentas del usuario )
la otra tengo 11,000,000 de registros ( movientos de la cuenta )


y tambien se pone lento ...

xcars: podrias mostrarnos un ejemplo de reestructura que manejastes en tu base de datos ya que nos comentas que tienes 10 M de registros

Saludos
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #10 (permalink)  
Antiguo 04/02/2008, 09:56
 
Fecha de Ingreso: enero-2008
Ubicación: mexicali
Mensajes: 11
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Busquedas rápidas en MySQL con bases de datos grandes

estas son mis bases de datos

esta es la de las cuentas contienen 250,000 registros

CREATE TABLE `cpaf0010` (
`USUARIO` varchar(12) default NULL,
`PROGRAMA` varchar(1) default NULL,
`PRESTAMO_IND_NUM` varchar(2) default NULL,
`SOLICITUD` varchar(10) default NULL,
`AAAAMMDD_SOLIC` varchar(8) default NULL,
`AAAAMMDD_ALTA` varchar(8) default NULL,
`AAAAMMDD_CANCEL` varchar(8) default NULL,
`IMP_PRESTAMO` decimal(8,2) default NULL,
`IMP_INTERESES` decimal(8,2) default NULL,
`IMP_DESC_MES` decimal(8,2) default NULL,
`IMP_INTERES_MES` decimal(6,2) default NULL,
`PLAZO` varchar(2) default NULL,
`IMP_ACUM_FAC` decimal(8,2) default NULL,
`IMP_ACUM_COB` decimal(8,2) default NULL,
`TASA_INTERES` decimal(6,5) default NULL,
`IMP_ACUM_INT_FAC` decimal(8,2) default NULL,
`IMP_ACUM_INT_COB` decimal(8,2) default NULL,
`IVA_ACUM_INT_FAC` decimal(6,2) default NULL,
`IVA_ACUM_INT_COB` decimal(6,2) default NULL,
`AAAAMM_UMF` varchar(6) default NULL,
`id_credito` int(11) NOT NULL auto_increment,
UNIQUE KEY `id_credito` (`id_credito`),
KEY `USUARIO` (`USUARIO`),
KEY `PROGRAMA` (`PROGRAMA`,`PRESTAMO_IND_NUM`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;



esta es la de los movimientos esta contiene 11,000,000 de registros

CREATE TABLE `cpaf0020` (
`USUARIO` varchar(12) default NULL,
`PROGRAMA` varchar(1) default NULL,
`PRESTAMO_IND_NUM` varchar(2) default NULL,
`AAAAMM` varchar(6) default NULL,
`TPO_MOV` varchar(2) default NULL,
`AAAAMMDD_MOV` varchar(8) default NULL,
`IMP_MOVIMIENTO` decimal(9,2) default NULL,
`DD` varchar(2) default NULL,
`id_mov` bigint(11) NOT NULL auto_increment,
PRIMARY KEY (`id_mov`),
KEY `USUARIO` (`USUARIO`),
KEY `PROGRAMA` (`PROGRAMA`,`PRESTAMO_IND_NUM`,`TPO_MOV`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED;


las llaves de los filtros de busquedas son:

Llave Principal: USUARIO + PROGRAMA+ PRESTAMO_IND_NUM

y de la otra es:

USUARIO + PROGRAMA+ PRESTAMO_IND_NUM+AAAAMMDD_MOV
  #11 (permalink)  
Antiguo 04/02/2008, 13:49
 
Fecha de Ingreso: agosto-2006
Mensajes: 50
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Busquedas rápidas en MySQL con bases de datos grandes

hola

yo cuando hago consultas grandes ocupo indices tal como son los filtro

por ejemplo si filtro por a+b+c, hago el indice por a+b+c, no a+b y otro indice que tenga c, se entiende??

si tu filtras por USUARIO + PROGRAMA+ PRESTAMO_IND_NUM, haz un indice con esos 3 campos...

Saludos
  #12 (permalink)  
Antiguo 07/02/2008, 12:49
Avatar de raffskizze  
Fecha de Ingreso: marzo-2004
Ubicación: ...
Mensajes: 433
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: Busquedas rápidas en MySQL con bases de datos grandes

Cita:
Iniciado por pelu0 Ver Mensaje
hola

yo cuando hago consultas grandes ocupo indices tal como son los filtro

por ejemplo si filtro por a+b+c, hago el indice por a+b+c, no a+b y otro indice que tenga c, se entiende??

si tu filtras por USUARIO + PROGRAMA+ PRESTAMO_IND_NUM, haz un indice con esos 3 campos...

Saludos
Has dado en el clavo, tambien pensar que en el select no da lo mismo * que los campos que vayas a necesitar concretamente dado que siempre hay alguno redundante y estos datos van a tener que ser procesados por lo que se acelera mas si se especifican los que necesites y no usas el comodo *.
__________________
echo ( www.tutorial-enlace.net == tutoriales gratis ) ? 'Aprenderas gratis !!' : 'No aprenderas !!';
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 22:06.