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

optimizacion de consulta

Estas en el tema de optimizacion de consulta en el foro de Mysql en Foros del Web. Hola a todos. Tengo una consulta a tres tablas, un poquito liada: Tabla1: mercado Campo1: vendedor Para hacer la consulta parto de esta tabla. Contiene ...
  #1 (permalink)  
Antiguo 24/03/2011, 18:28
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 13 años, 9 meses
Puntos: 11
optimizacion de consulta

Hola a todos.

Tengo una consulta a tres tablas, un poquito liada:

Tabla1: mercado
Campo1: vendedor

Para hacer la consulta parto de esta tabla. Contiene un campo ID (no de usuario, sino de venta, que es de donde inicio para hacer la consulta).

Tabla2: bienes
Campo2: dinero

Contiene un campo ID de usuario

Tabla3: principal
Campo3: nombre

Contiene un campo ID de usuario

La consulta es asi:
Código MySQL:
Ver original
  1. SELECT mercado.vendedor, principal.ID, bienes.dinero
  2. FROM mercado
  3. INNER JOIN principal ON mercado.vendedor = principal.nombre
  4. INNER JOIN bienes ON principal.ID = bienes.ID
  5. WHERE mercado.ID = $dato

El problema ha venido al utilizar EXPLAIN para ver "como de buena" era esta consulta.
(La consulta debe mostrar siempre un unico registro.)

Me arrojo el siguiente resultado:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE mercado const PRIMARY PRIMARY 4 const 1
1 SIMPLE bienes ALL PRIMARY NULL NULL NULL 192
1 SIMPLE principal eq_ref PRIMARY PRIMARY 4 bd.bienes.ID 1 Using where

y ese resultado en gris no me gusto nada. Mas que no gustarme (que eso tambien), no entiendo porque ha de leer todos los registros si le he dado la condicion "principal.ID = bienes.ID ".

Hay alguna manera de optimizar esto? quizas un LIMIT haria que tras obtener un resultado (registro) que cumpla las condiciones, deje de buscar en los demas??? La verdad que lo digo un poco a la desesperada pq no se "por donde tirar"....

Alguna idea??

1 saludo y muchas gracias!
  #2 (permalink)  
Antiguo 25/03/2011, 06:20
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 13 años, 9 meses
Puntos: 11
Respuesta: optimizacion de consulta

Por facilitar un poco el asunto, me he dado cuenta de que puedo (podria) prescindir de la consulta a la tabla3: principal. el problema me surge pq querria quitarmela de encima y es lo que utilizo como nexo de union (y no se como prescindir de ella).


tabla1:mercado (donde inicio la consulta.necesito consulta de datos)
.
.
.
\/
tabla3:principal(union entre mercado a traves del nombre del usuario y entre bienes a traves del ID primario)
.
.
.
\/
tabla2:bienes (donde tb quiero hacer consulta)
  #3 (permalink)  
Antiguo 25/03/2011, 07:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: optimizacion de consulta

No me queda claro si ID es la pk de bienes si no lo es podria haber mas de uno por lo que tiene que mirar toda la tabla. Si es así lo unico que podrias hacer es crear un indice sobre ese campo y forzar su uso (...USE INDEX...)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 27/03/2011, 16:52
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 13 años, 9 meses
Puntos: 11
Respuesta: optimizacion de consulta

Gracias por constestar quimfv.

Asi es, ID es la PK de bienes, por lo que unicamente puede haber 1 solo resultado...

Lo que no me queda claro es como usar el USE INDEX...

eso me reduciria el numero de "busquedas"...?
  #5 (permalink)  
Antiguo 28/03/2011, 02:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: optimizacion de consulta

Manual

Cita:
SELECT * FROM table1 USE INDEX (col1_index,col2_index)
WHERE col1=1 AND col2=2 AND col3=3;
Eso fuerza el uso del indice y claro pasa por nodos del indice que siempre seran menos...

Pero si es la PK en principio ya lo usa, solo en principio.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: Ninguno
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 15:36.