Ver Mensaje Individual
  #1  
Antiguo 05-11-2008
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Reputación: 21
David Va por buen camino
Wink Duda sobre rendimiento de un JOIN

Hola

supongamos que tengo dos tablas en base de datos, Facturas y DetalleFacturas. La clave de facturas es el campo Factura (integer) y de DetalleFacturas es Factura y LineaFactura (ambos integer), en el campo Factura tengo un campo que puede ser Contabilizado, que está marcado como 1 si el departamento de contabilidad la ha procesado y 0 en caso contrario.

Quiero sacar por ejemplo, un listado de Articulos con su factura al lado, para las facturas donde Contabilizado = 1, decir que Articulo esta en el Detalle de Facturas.

Lo complico más la tabla Factura tiene el campo Cliente(integer), cuyo nombre se encuentra en la tabla EmpresaCliente, cuya clave primaria es Cliente, de tipo Integer, también quiero el nombre del cliente.

De estas dos formas de hacer la Query, ¿Cuál es más rápida y eficiente? Yo pienso que da igual una forma que otra, pero realmente no estoy seguro.

Código SQL [-]

SELECT D.FACTURA,D.ARTICULO,C.CLIENTENOMBRE
FROM DETALLEFACTURA D
INNER JOIN FACTURA F
ON (D.FACTURA=F.FACTURA) AND (F.CONTABILIZADO = 1)
INNER JOIN EMPRESACLIENTE C
ON (F.CLIENTE=C.CLIENTE)

o esta forma de hacerlo:

Código SQL [-]
SELECT D.FACTURA,D.ARTICULO,C.CLIENTENOMBRE
FROM DETALLEFACTURA D
INNER JOIN FACTURA F
ON (D.FACTURA=F.FACTURA) 
INNER JOIN EMPRESACLIENTE C
ON (F.CLIENTE=C.CLIENTE)
WHERE (F.CONTABILIZADO = 1)

Cómo veis de la primera forma, añado que las facturas contabilizadas sean 1, en la condición ON del JOIN, y de la segunda forma, lo añado en el Where del final.

Saludos
Responder Con Cita