jueves, 29 de diciembre de 2011

Selects Anidados o Inner Join


Sé que muchos de nosotros, más de una vez, hemos usado selects anidados. ¿No saben a qué me refiero? Sí estas largas sintaxis:

Select   Nombres,
                apellidos,
                (Select descripción from ubigeo u where a.ubigeo = u.ubigeo) distrito,
                Dirección
From persona

Aunque parezca insignificante esta línea “(Select descripción from ubigeo u where a.ubigeo = u.ubigeo)” consume gran cantidad de recursos al momento de ejecutar la consulta. Esto debido a que por cada registro que devuelva su consulta se ejecutara el select de ubigeo, por ejemplo si su consulta devuelve 10 000 registros el servidor le hará select 10 000 veces a la tabla ubigeo. Quizá con pocos registros no noten la diferencia, pero cuando manejen una gran cantidad créanme que el tiempo de respuesta de sus consultas realmente SI IMPORTA.

Después de lo anteriormente expuesto la mejor manera de hacer ese select seria:

Select   P.Nombres,
                P.apellidos,
                U.descripción distrito,
                P.Dirección
From persona P
Inner Join Ubigeo U On P.ubigeo = U.ubigeo

Donde:

Después la cláusula “inner join” debe de ir la tabla con la que vamos a unir la consulta, luego con la cláusula “On” procedemos a indicar los campos clave para indexar  ambas tablas

De esta manera solo invocamos a la tabla una sola vez.
Cabe recomendar que para un mejor desempeño lo más recomendable es que los campos a indexar sean PK(Primary Key) o FK(Foreing Key).

El uso de Joins nos ayudara a mejorar el rendimiento de la consulta, ahorrando tiempo al momento de la ejecución.