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
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
