FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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.
o esta forma de hacerlo:
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 |
#2
|
||||
|
||||
En teoría el join es la operación más costosa en tiempo por lo que lo mejor es que el conjunto de tuplas que unes sea lo más limitado posible, todo lo que puedas sacar antes de hacer el join es menos tiempo para tu consulta.
|
#3
|
||||
|
||||
framerobin es un manejador de bases de datos que incluye un "plan analyzer", deberías investigar por ese lado. Suponiendo que no uses paradox u otras tablas planas.
El motor de Bases de datos puede cambiar el plan de ejecución de una sql, basándose en muchos aspectos: - orden de la consulta - orden en que se ejecutan los inner joins - campos seleccionados - índices, - etc.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
||||
|
||||
La segunda opción es la más elegante y según he leido en algún lugar: los campos para filtrar (en este caso f.contabilizado=1) deben estar en el where y los campos para unir en el join.
De todos modos, según la base de datos que utilices, una opción podrá darte mejores resultados que la otra. También, puede ser que si tienes un índice que tenga en cuenta los campos factura y contabilizado a la vez, la consulta sea un poco más óptima. Del mismo modo, puede pasar lo contrario, si no tienes buenos índices para hacer el join. |
#5
|
|||
|
|||
No lo he dicho, utilizo Firebird 1.5
|
#6
|
||||
|
||||
entonces te gustará flamerobin.... al menos la opción que digo, para lo demás, está un poco verde, pero usable.
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
left join e inner join duda | Patricio | SQL | 0 | 26-04-2007 22:06:43 |
Sobre Gnome: su configuración, rendimiento y demás... | Ñuño Martínez | Linux | 5 | 05-01-2007 10:31:07 |
Consulta sobre left / Right outer join | ContraVeneno | MS SQL Server | 2 | 06-07-2006 15:18:12 |
Duda sobre rendimiento | Jesús Pena | Conexión con bases de datos | 5 | 24-11-2005 15:15:48 |
Duda rendimiento de aplicacion IBX en VPN | raul_sal | Conexión con bases de datos | 5 | 24-11-2003 10:47:49 |
|