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

Lentitud Buscador MySQL

Estas en el tema de Lentitud Buscador MySQL en el foro de Mysql en Foros del Web. Buenas tardes, tengo este problema con el tiempo que tarda en mostrar los resultados en un buscador MySQL (La base de datos está en InnoDB). ...
  #1 (permalink)  
Antiguo 02/12/2013, 07:46
 
Fecha de Ingreso: febrero-2013
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
Lentitud Buscador MySQL

Buenas tardes, tengo este problema con el tiempo que tarda en mostrar los resultados en un buscador MySQL (La base de datos está en InnoDB).

La consulta es la siguiente:

Código MySQL:
Ver original
  1. SELECT producto.marca,producto.nombre,producto.codigo,producto.imagen FROM producto
  2. WHERE CONCAT( producto.nombre, producto.marca) REGEXP '$txt_criterio' AND producto.tipologia <> 'Adultos';

Cita:
Editado: Código de programacion no permitido en foros de Bases de Datos. Leer las normas, por favor.
¿Cómo podría optimizarlo? En una tabla con 1000000 de productos tarda más de 20 seundos en mostrar los resultados.

Muchas gracias

Última edición por gnzsoloyo; 02/12/2013 a las 07:55
  #2 (permalink)  
Antiguo 02/12/2013, 09:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Lentitud Buscador MySQL

Tres preguntas:
1) ¿Si cambias el orden del filtrado al que te pongo debajo ,qué ocurre?
Código MySQL:
Ver original
  1. SELECT producto.marca,producto.nombre,producto.codigo,producto.imagen FROM producto
  2. WHERE producto.tipologia <> 'Adultos' AND CONCAT( producto.nombre, producto.marca) REGEXP '$txt_criterio'

2) Imagino que has indexado producto y marca. Si no lo has hecho, hazlo también y prueba. ¿Por qué necesitas el CONCAT? Explícanos la casuística de lo que buscas

3) Las expresiones regulares utilizan muchos recursos. Dinos qué puede ser $txt_criterio
  #3 (permalink)  
Antiguo 02/12/2013, 09:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Lentitud Buscador MySQL

Como dice @jurena: Muéstranos qué valoers reales podría tener ne un caso esa variable. No postees código de PHp de cómo lo obtienes, porque eso no es tema de este foro.
Postea un ejemplo de datos reales que puedas haber usado en algún caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 03/12/2013, 01:34
 
Fecha de Ingreso: febrero-2013
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Lentitud Buscador MySQL

Buenos días.

La idea es que el buscador filtre el resultado en los campos nombre o marca a partir de una cadena de texto (el buscador debe buscar caracter a caracter la palabra que insertamos).

Ejemplo:

Búsqueda realizada: teléfono 5"

Si en la Base de Datos existe el siguiente producto:
idproducto = 1 , Nombre: "El teléfono móvil de 5" de....."

Pues debería mostrar como resultado ese producto (idproducto = 1).


El CONCAT es para buscar en los campos Marca y Nombre de la tabla producto.

Muchas gracias

Saludos
  #5 (permalink)  
Antiguo 03/12/2013, 03:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Lentitud Buscador MySQL

debes tener indexado el campo nombre y el campo tipología. Puesto que buscas por nombre y tipología, creo que no será necesario ese CONCAT. Si necesitaras buscar en dos campos a la vez o palabras sueltas, tendrías otras opciones, pero no creo que nadie busque ese 1.
Código MySQL:
Ver original
  1. SELECT producto.marca,producto.nombre,producto.codigo,producto.imagen FROM producto
  2. WHERE producto.tipologia <> 'Adultos' AND producto.nombre LIKE '%$txt_criterio%'

Etiquetas: buscador, lentitud, select, sql, 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 10:38.