Mis consultas son algo así:
opcion 1:
Código PHP:
SELECT ingresodetalle.*, producto.*, unidad.valordecimal FROM producto
INNER JOIN ingresodetalle ON (
ingresodetalle.codigo_ingreso=1608 AND
EXISTS (SELECT ordencompradetalle.codigo FROM ordencompradetalle
WHERE ordencompradetalle.codigo_orden=1715 AND
ordencompradetalle.codigo=ingresodetalle.ordencompradetalle) AND
ingresodetalle.codigo_producto = producto.codigo )
INNER JOIN unidad ON ( unidad.detalle=producto.unidad )
WHERE producto.codigo_maestroproducto=2 ORDER BY ingresodetalle.codigo
y la opcion 2:
Código PHP:
SELECT ingresodetalle.*, producto.*, unidad.valordecimal FROM producto
INNER JOIN ingresodetalle ON ( ingresodetalle.codigo_producto = producto.codigo )
INNER JOIN unidad ON ( unidad.detalle=producto.unidad )
WHERE producto.codigo_maestroproducto=2 AND
ingresodetalle.codigo_ingreso=1608 AND
EXISTS (SELECT ordencompradetalle.codigo FROM ordencompradetalle
WHERE ordencompradetalle.codigo_orden=1715 AND
ordencompradetalle.codigo=ingresodetalle.ordencompradetalle)
ORDER BY ingresodetalle.codigo
el explain:
"Sort (cost=195.86..195.87 rows=2 width=187)"
" Sort Key: ingresodetalle.codigo"
" -> Nested Loop (cost=162.13..195.85 rows=2 width=187)"
" -> Nested Loop (cost=162.13..195.28 rows=2 width=186)"
" -> Nested Loop (cost=162.13..178.71 rows=2 width=69)"
" -> Unique (cost=162.13..162.14 rows=2 width=8)"
" -> Sort (cost=162.13..162.14 rows=2 width=8)"
" Sort Key: ordencompradetalle.codigo"
" -> Seq Scan on ordencompradetalle (cost=0.00..162.12 rows=2 width=8)"
" Filter: (codigo_orden = 1715)"
" -> Index Scan using fki_tiene_or_in on ingresodetalle (cost=0.00..8.27 rows=1 width=69)"
" Index Cond: (ingresodetalle.ordencompradetalle = ordencompradetalle.codigo)"
" Filter: (ingresodetalle.codigo_ingreso = 1608)"
" -> Index Scan using producto_pkey on producto (cost=0.00..8.27 rows=1 width=117)"
" Index Cond: (producto.codigo = ingresodetalle.codigo_producto)"
" Filter: (producto.codigo_maestroproducto = 2)"
" -> Index Scan using unidad_pkey on unidad (cost=0.00..0.28 rows=1 width=12)"
" Index Cond: (unidad.detalle = producto.unidad)"
El "explain" Es exactamente el mismo para ambas consultas, y como se ven iguales es que me asalta la duda acerca de que es en términos generales lo mejor.
Quizás mi comprensión de lectura no es de las mejores, pero me parece que sus opiniones están un poco contrapuestas.
Realmente la duda se me produce porque en la actualidad desplegar una página web en donde se hace uso de esta consulta paso de demorar en desplegarse de unos 4 segundos a unos 18 segundos. Tampoco es que sea una demora excesiva, ni que sea inutilizable esa sección, si no que simplemente me despertó curiosidad.
Saludos.
P.D.1: Uso postgresql 8.4
P.D.2: La razón del tiempo que se toma en desplegar la página es debido a la consulta, a pesar de que la tabla no ha crecido demasiado.
P.D.3: el servidor parece estar configurado de acuerdo a lo recomendado.