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

[SOLUCIONADO] Problemas con DB muy grande

Estas en el tema de Problemas con DB muy grande en el foro de Mysql en Foros del Web. Hola amigos, Tengo un problema que no se como solucionar, tengo una base de datos (que a mi parecer) es muy grande. unos 500.000 registros ...
  #1 (permalink)  
Antiguo 25/09/2013, 16:05
 
Fecha de Ingreso: abril-2010
Mensajes: 86
Antigüedad: 14 años
Puntos: 0
Problemas con DB muy grande

Hola amigos,

Tengo un problema que no se como solucionar, tengo una base de datos (que a mi parecer) es muy grande. unos 500.000 registros tiene una determinada tabla, y en un futuro no muy lejano puede llegar al millon.
Y claro cuando quiero hacer una busqueda de un nombre en particular usando algo parecido a :
.....AND Tags LIKE '%$tag%'....
Pues claro, tarda la vida o no llega a dar el resultado.

¿Alguna idea de cómo puedo reducir el tiempo de busqueda? he pensado en reducir el número de registros donde buscar pero eso reduce el fuerte de tener una gran base de datos.... no se que hacer :(

Un saludo y gracias !
  #2 (permalink)  
Antiguo 25/09/2013, 17:39
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: Problemas con DB muy grande

El primer conse sano que se te puede dar es no uses esta forma:
Código MySQL:
Ver original
  1. .. LIKE '%$tag%'
Una esta:
Código MySQL:
Ver original
  1. .. LIKE '%$tag'
o esta:
Código MySQL:
Ver original
  1. .. LIKE '$tag%'
Por dos razones al menos:
1) Si mandas a buscar lo que comience cualquier cosa y termine con cualquier cosa, estás haciendo que MySQL lea toda la tabla, sin excepciones, incluso si no encuentra nada.
Trata de imaginar lo que hace eso a la performance de una consulta...

2) Practicamente nadie pone como frase de búsqueda algo que esté entremedio. O pone el inicio o el final, pero no pone algo que vaya al medio de todo...
Es un tema de uso estadístico. Las excepciones no son importantes en esta afirmación.

Finalmente, si por alguna razón necesitas usar ese tipo de búsqueda, es mejor usar indices de tipo FULLTEXT, más eficientes en ese tipo de consultas.
La única desventaja de esos índices es que sólo aplican a tablas MyISAM, que no tienen FK ni transacciones, por lo que en algunos sistemas no son una opción.

Otra cosa, a nivel de aplicación, muy útill, es restringir al usuario para que nunca se ponga a buscar textos de menos de cinco caracteres, ya que el nivel de coincidencias inútiles (datos-basura) sería muy elevado.
¿Como cuanto?
Bueno, imaginate que le dejas buscar cualquier cosa, y te pone "del".
¿Te haces una idea de la cantidad de coincidencias posibles?
enorme. Por eso los índices FULLTEXT no consideran las busquedas con menos de cierta cantidad de letras.
__________________
¿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 26/09/2013, 02:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problemas con DB muy grande

Cita:
.....AND Tags LIKE '%$tag%'....
Eso parece indicar que tienes un campo con todos los tags del registro, eso es un campo multivaluado, lo cual es un error de diseño grave, yo me plantaría un rediseño de la base de datos, si los tags de ese campo están delimitados (p.e. tag1,tag2,....) es relativamente facil de separar y crear una tabla de tags únicos y una de relación con el registro... con lo que podrías dejar de usar LIKE, si no estan delimitados es mas complicado. Si la busqueda es sobre un texto luego no he dicho nada.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 30/09/2013, 17:12
 
Fecha de Ingreso: abril-2010
Mensajes: 86
Antigüedad: 14 años
Puntos: 0
Respuesta: Problemas con DB muy grande

muchas gracias por los consejos :D

Etiquetas: grande, registros, tabla
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 01:35.