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

agilizar busqueda en base de datos

Estas en el tema de agilizar busqueda en base de datos en el foro de Mysql en Foros del Web. buenas, tengo un formulario con listas desplegables, variables. segun las variables, busca en la bd unos resultados u otros. como es una busqueda bastante grande, ...
  #1 (permalink)  
Antiguo 01/10/2009, 14:15
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
agilizar busqueda en base de datos

buenas,

tengo un formulario con listas desplegables, variables. segun las variables, busca en la bd unos resultados u otros. como es una busqueda bastante grande, se queda en el form mientras muestra el listado.

hago un select entre miles de registros, de 4 bases de datos relacionadas entre si por un id_usuario.

de que forma puede hacer que la búsqueda no sea tan lenta?

saludos!
  #2 (permalink)  
Antiguo 01/10/2009, 14:31
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: agilizar busqueda en base de datos

Como tienes la consulta?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 01/10/2009, 14:36
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: agilizar busqueda en base de datos

buenas huesos,

el form, puedes determinar los 8 criterios. envio todas las variables por POST, y las evaludo con un array[] para hacer el WHERE.. AND... eso ya esta

es un SELECT .. con 3 INNER JOIN

que necesitas?

saludos
  #4 (permalink)  
Antiguo 01/10/2009, 15:00
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, 4 meses
Puntos: 2658
Respuesta: agilizar busqueda en base de datos

Y, sería buena idea que postearas la sentencia tal y como la estás usando (sin variables, con datos de ejemplo), para ver qué se te puede aconsejar... porque lo que dices es demasiado general.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 01/10/2009, 16:05
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: agilizar busqueda en base de datos

gnzsoloyo,

aqui te posteo todo el codigo:


a ver que podemos hacer, la busqueda se hace eterna.

saludos!

Última edición por ferranWEB; 01/10/2009 a las 16:39 Razón: equivocacion
  #6 (permalink)  
Antiguo 01/10/2009, 16:08
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: agilizar busqueda en base de datos

Ferran imprime el contenido de la variable $sql1 y postea la sentencia sql limpia.
En este foro, no se permite hacer uso de codigo php ni de ningún lenguaje de programación.

Con la sentencia limpia te podemos ayudar mejor.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 01/10/2009, 16:42
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: agilizar busqueda en base de datos

buenas huesos,

la sentencia es la siguiente:

SELECT * FROM datos_usuario INNER JOIN datos_personales ON datos_usuario.idusuario = datos_personales.idusuario INNER JOIN datos_estudios ON datos_usuario.idusuario = datos_estudios.idusuario INNER JOIN datos_otros ON datos_usuario.idusuario = datos_otros.usuario WHERE datos_personales.sexo='Hombre' AND datos_otros.permiso_conducir='B' AND datos_otros.vehiculo='si' AND datos_otros.disponibilidad_horaria='Total' AND datos_otros.viajar='si'AND datos_usuario.estado='activo'

este es el echo de $sql1

me ha devuelto 246 resultados, cuantos mas resultados muestra, mas tarda... te referias a que querias eso?

saludos
  #8 (permalink)  
Antiguo 01/10/2009, 16:45
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: agilizar busqueda en base de datos

y si pongo todas las variables "", para que me muestre todos los datos, me tarda mucho... y me muestra la siguiente consulta:

SELECT * FROM datos_usuario INNER JOIN datos_personales ON datos_usuario.idusuario = datos_personales.idusuario INNER JOIN datos_estudios ON datos_usuario.idusuario = datos_estudios.idusuario INNER JOIN datos_otros ON datos_usuario.idusuario = datos_otros.usuario

me muestra 7600 registros, super lento
  #9 (permalink)  
Antiguo 01/10/2009, 17:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: agilizar busqueda en base de datos

Era eso ferranWeb.

Te daría 2 recomendaciones:
1. Realmente requieres todos los capos en la consulta?(*from)
Si no los requieres todos, especifica uno a uno los campos que quieres. Esto ayuda a ganar optimización.
2. Utiliza index en las columnas que sean necesarias. Información aca

Cuando hayas hecho esto, prueba nuevamente la consulta y nos cuentas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 02/10/2009, 02:31
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: agilizar busqueda en base de datos

buenas huesos,

buena recomendacion, ya que de esos datos solo necesito mostrar 5 campos. no habia caido, ya que luego al clickar encima del usuario, paso unicamente el idusuario y muestro la info en otra pagina.

solo una cosa, de la consulta que tengo

SELECT * FROM datos_usuario INNER JOIN datos_personales ON datos_usuario.idusuario = datos_personales.idusuario INNER JOIN datos_estudios ON datos_usuario.idusuario = datos_estudios.idusuario INNER JOIN datos_otros ON datos_usuario.idusuario = datos_otros.usuario

como hago para hacer un SELECT solo de los campos? es decir, de que forma tengo que hacerlo?

he probado

SELECT datos_usuario.login, datos_personales.nombre, datos_estudios.especialidad.. FROM...

y no me funciona. de que formo pongo los campos de cada una de las tablas??

saludos!
  #11 (permalink)  
Antiguo 02/10/2009, 02:48
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: agilizar busqueda en base de datos

buenas,

ya he ma funcionado. me habia equivocado! la consulta sigue siendo lenta cuando dejan todos los campos indiferente, es decir, que hace una busqueda y muestra los 7000 registros, sin filtro.

he puesto SELECT datos_personales.nombre, datos_personales.apellidos, datos_estudios.nivel... FROM

y perfectooo!!

gracias tio!
  #12 (permalink)  
Antiguo 02/10/2009, 05:09
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: agilizar busqueda en base de datos

ya indexaste algunos campos?
El objetivo principal de los index es agilizar las consultas sobre las tablas. Ahí verás una mejora muy significativa.

Saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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 04:44.