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

Optimizar consulta por texto

Estas en el tema de Optimizar consulta por texto en el foro de Mysql en Foros del Web. Hola, Me ha surgido un problema con una consulta, a ver si pueden orientarme ya que mi nivel de base de datos es más bien ...
  #1 (permalink)  
Antiguo 30/10/2014, 06:41
 
Fecha de Ingreso: enero-2011
Ubicación: Barcelona
Mensajes: 36
Antigüedad: 13 años, 3 meses
Puntos: 5
Optimizar consulta por texto

Hola,

Me ha surgido un problema con una consulta, a ver si pueden orientarme ya que mi nivel de base de datos es más bien básico.

La situación es la siguiente:

Tabla: test
Campos: (id, nombre, texto, fecha)

Actualmente filtro por fechas únicamente que fue el requisito inicial, pero ahora me han pedido que también se pueda filtrar por "palabra clave", las palabras clave las tengo en otra tabla guardadas.

La consulta que a mí se me ocurre es la siguiente:

Código SQL:
Ver original
  1. SELECT
  2.     *
  3. FROM
  4.     test
  5. WHERE
  6.     texto LIKE '%palabraclave%'


Que es una consulta que funciona pero esta tabla posee muchos registros que incrementaran cada día y el campo 'texto' suele ser un artículo de bastantes caracteres, por lo que esta consulta será lenta.

He leído algo acerca de índices, pero no termino de entender cómo se usan exactamente.

Me podrían ayudar a optimizar esta consulta?

Muchas Gracias.

Saludos, Alex.
  #2 (permalink)  
Antiguo 03/11/2014, 12:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Optimizar consulta por texto

Hola alx1417:

Tal como lo mencionas, la consulta que planteas puede traerte problemas al utilizar comparaciones tipo LIKE, ya que estas, de entrada, son las que peor desempeño o rendimiento tienen en SQL... además, la manera en que la estás utilizando, es decir, con el comodín % antes y después de la palabra a buscar, hacen que la condición tenga un peor rendimiento, ya que la búsqueda se haría de manera exhaustiva contra todo el texto que puedas tener en tu consulta.

Los índices funcionan tal como lo infieres, para optimizar búsquedas y ordenaciones, puedes checar estas dos ligas para leer un poco de teoría al respecto:

http://dev.mysql.com/doc/refman/5.0/...l-indexes.html

http://dev.mysql.com/doc/refman/5.1/en/index-hints.html

Ahora bien, dado que necesitas hacer búsquedas sobre campos tipo texto, tal vez te convenga sustituir las comparaciones tipo LIKE por operaciones de BÚSQUEDA DE TEXTO COMPLETO, es decir utilizar las funciones MATCH-AGAINST, estás funciones son mucho más versátiles que el LIKE y están optimizadas para el tipo de búsquedas que planteas.

Checa un poco de la teoría para ver si te puede servir.

http://dev.mysql.com/doc/refman/5.0/...xt-search.html

Finalmente, hacer consultas tipo SELECT * es una terrible idea, en lugar de traer todos los campos, es mejor que listes en el SELECT sólo aquellos que realmente necesitas. Aun si fuera el caso de que realmente necesites recuperar todos y cada uno de los campos:

Código:
es mejor que pongas

SELECT id, nombre, texto, fecha FROM tabla

a poner 

SELECT *
Saludos
Leo
  #3 (permalink)  
Antiguo 07/11/2014, 05:05
 
Fecha de Ingreso: enero-2011
Ubicación: Barcelona
Mensajes: 36
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Optimizar consulta por texto

Hola leonardo_josue,

Gracias por contestar y perdona que hay tardado tanto en responderte, pero no he tenido tiempo.

Respecto a tus consejos creo que utilizaré el MATCH que es lo que veo más sencillo y entiendo.

Haré pruebas de rendimiento y ya te comentaré!

Respecto al "Selct *" lo puse por escribir rápido pero en las consultas coloco todos los campos si son necesarios, pero gracias por comentarlo!

Saludos, Alex.

Etiquetas: campo, registro, 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 06:13.