Menu

Mejores practicas de SQL

Evitar subconsultas:

Al utilizar subconsultas, el motor de base de datos tendrá que realizar es consulta por cada registro que retorne la consulta principal, en otras palabras, la base de datos no hará solo una consulta, sino que realizará consultas del total de registros más la principal.

Por ejemplo:

select c.CODIGO_CUENTAS,
c.TIPO_CUENTA,
c.CUENTA,
c.codigo_banco,
(select b.nombre from bancos b where b.codigo_banco=c.CODIGO_BANCO) nombre_banco
from cuentas c;

Recomendación:

Utilización de Joins ya que realizará la unión de los registros sin estar realizando la consulta por cada registro.

select c.CODIGO_CUENTAS,
c.TIPO_CUENTA,
c.CUENTA,
c.codigo_banco,
b.nombre nombre_banco
from cuentas c
inner join bancos b on b.codigo_banco=c.codigo_banco;

MANEJO DE FECHAS

Al utilizar registros con tipo de dato datetime, date, etc., es recomendado utilizar la función DATEDIFF, ya que en muchas ocasiones por el formato o región del servidor no se logra obtener los resultados deseados.

Por ejemplo, si deseamos mostrar todas aquellas personas que tengan más de 25 años:

Select codigo, nombre, fecha_nacimiento from personas
where datediff(day, fecha_nacimiento, getdate())>25

EVITAR EL USO DE DISTINCT

Este comando utiliza demasiados recursos de la base de datos, por tal motivo es necesario analizar si lo necesitamos o no, solo si en realidad sabes que la consulta va a retornar más de las filas deseadas por el registro, en este caso recomiendo utilizar la sentencia group by, he podido experimentar que esto hasta mejora el tiempo de respuesta que genera al realizar la consulta, aunque tengas que escribir unas cuantas lineas más de la base de datos.

Por sentencias es mucho más cómodo y rápido para nosotros solo escribir un distinct que un group by, pero si la cantidad de datos que vamos a manejar es muy grande afectara considerablemente el tiempo de respuesta y los recursos utilizados por el servidor, adicional si ya tenemos el gruop by es más sencillo poder realizar consultas a nivel del grupo con la sentencia having o también si en un futuro necesitamos realizar sumatoria del registro.

Por ejemplo:

select distinct empleado, nombre 
from personas;

Recomendado:

select empleado, nombre from personas
group by empleado, nombre

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *