Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/11/2009, 22:07
Avatar de granbosteron
granbosteron
 
Fecha de Ingreso: agosto-2004
Mensajes: 164
Antigüedad: 19 años, 8 meses
Puntos: 1
Optimizar consulta

Hola gente, como andan?
Bueno tengo un SELECT a la base de datos, que el mismo lleva mucho tiempo de consulta, queria compartirlo con ustedes y ver si hay alguna manera de optimizarlo para que sea mas rapido, ya que segun como este configurado el servidor, puede tirarme un error por sobrepasar el limite de espera.

Tengo 3 Tablas:

ORDENES o (aqui guardo los datos del cliente y de la orden)
ORDENES TOTAL ot (aqui guardo el precio total de la orden)
ORDENES HISTORIAL oh (aqui fecha a fecha el historial de la orden, o sea cuando fue realizada la orden, a media que la orden se apruebe o sufra otras modificaciones, se ira guardando una fecha para la modificacion realizada)




Código PHP:
SELECT 
  DISTINCT
(o.orden_id), 
  
o.cliente_id
  
o.cliente_nombre
  
o.cliente_apellido
  
ot.total_precio
  
COUNT(DISTINCT(oc.orden_id)) AS count_orden
  
MAX(oh.fecha_inicial) AS fecha   
  
  FROM ordenes o   
  LEFT JOIN ordenes_total ot ON 
o.orden_id ot.orden_id 
  
LEFT JOIN ordenes oc ON (o.cliente_id=oc.cliente_id
  
LEFT JOIN ordenes_historial oh ON (o.orden_id=oh.orden_id

  
GROUP BY o.orden_id 
Eh notado que al quitar el COUNT y el MAX de la fecha mayor de la orden, la consulta es mucho mas rapido. Explico que el COUNT lo utilizo para saber si ese cliente tiene mas ordenes realizadas, y el MAX es para buscar la fecha mas reciente de la tabla de historial de fechas.

Se me ocurrieron 2 soluciones:
1. Para el COUNT guardar en la tabla de CLIENTES, un campo para la cantidad de ordenes que tiene ese cliente e ir incrementando en 1 cada vez que vuelva a hacer un pedido.

2. Para el max de la fecha, tener dos campos en la tabla ORDEN, uno que sea fecha_inicial (para cuando realizo la orden) y el otro campo que sea fecha_modificacion (para guardar la fecha de la ultima modificacion). En este punto aclaro que la tabla ORDENES_HISTORIAL la tengo porque ahi voy guardando cada modificacion que se realiza en la orden, desde que la hace hasta cuando va cambiando de estado, lo hice asi porque ante cada modificacion se guardan textos que explican el porque de la modificaion y el cliente puede consultarlos en su panel de usuario. Es por eso que necesito el historial de las fechas.

Espero se entienda y puedan darme una mano para que la consulta sea mas rapida.

saludos
__________________
Saludos :adios: :adios: :adios: