Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/09/2013, 17:39
Avatar de gnzsoloyo
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)