Mejores practicas en sql server 2008

Solo disponible en BuenasTareas
  • Páginas : 26 (6472 palabras )
  • Descarga(s) : 0
  • Publicado : 9 de noviembre de 2011
Leer documento completo
Vista previa del texto
Programación en MS SQL
Lógica de Negocios en BD
Caso Generación de Información Masiva
Caso Carga de Información Masiva
SSIS
Herramientas de optimización e información de las consultas en general

* Evitar el uso de la sentencia “SELECT *” . Esta sentencia genera un impacto en el rendimiento de la consulta debido a que el motor SQL antes de buscar la data realiza primero una lecturade toda al estructura de la tabla o tablas afectadas.
Ejemplo:
No se recomienda:
SELECT *
FROM operación

Se recomienda:
SELECT ope_numero_operacion, ope_codigo_cliente
FROM operacion

* Si se realiza una consulta de varias tablas, y la relación se realiza de manera implícita, se recomienda especificar en cada columna de la consulta el nombre de la tabla a la que pertenece.Esto mejora el rendimiento de la consulta debido a que el motor SQL ya no dedicará tiempo y recursos en buscar a qué tabla pertenece cada columna.
Ejemplo:
No se recomienda:
SELECT ope_numero_operacion, cli_nombre_comercial
FROM operacion, cliente
where cliente.cli_codigo = operacion.ope_codigo_cliente

Se recomienda:
SELECT operacion.ope_numero_operacion, cliente.cli_nombre_comercial
FROMoperacion, cliente
where cliente.cli_codigo = operacion.ope_codigo_cliente

Si se realiza una consulta de varias tablas y la relación se realiza de manera implícita, se debe ingresar el orden correcto de las tablas en la clausula “FROM” y “WHERE”. Esto puede reducir la cantidad de registros leídos por la consulta.
Ejemplo:
No se recomienda:
SELECT aux_descripcion
FROM tio_aux,reclasificacion_ctb
WHERE tio_aux.aux_codigo_tioaux = reclasificacion_ctb.rctb_tio_aux
AND rctb_periodo = '200312'

Se recomienda:
SELECT aux_descripcion
FROM reclasificacion_ctb, tio_aux
WHERE rctb_periodo = '200312'
AND reclasificacion_ctb.rctb_tio_aux = tio_aux.aux_codigo_tioaux

Asimismo, cuando las condiciones de la clausula WHERE incluyen el operador AND, se debe ubicar la condición quehaga un mejor filtro por delante de las demás, de tal forma que si no se cumple esta condición, el motor de la base de datos ya no valida las condiciones restantes.

* En lo posible, se debe tratar de evitar el uso de cursores. Los cursores utilizan muchos recursos y disminuyen el rendimiento de las aplicaciones. En caso que no haya otra opción que utilizar cursores, al finalizar su uso nosólo se debe cerrar el cursor, sino también se le debe liberar de memoria (DEALLOCATE cursor).

* No se recomienda utilizar tablas temporales a no ser que sea completamente necesario. Un escenario ejemplo sería si con éstas se evita utilizar cursores. En este caso, si se van a utilizar tablas temporales, éstas deben ser creadas considerando los siguientes puntos:

* Incluir sólo lascolumnas que se van a utilizar.
* No utilizar la sentencia SELECT INTO para poblar la tabla, ya que esta sentencia utiliza LOCKS en varios objetos. En su lugar, se debe crear la tabla de manera regular y luego utilizar la sentencia INSERT INTO para poblarla.

* Evitar utilizar funciones en la clausula WHERE. Las llamadas a funciones impactan el rendimiento de la consulta. Se recomienda buscaralternativas con las que se obtengan los mismos resultados.
Ejemplo:
No se recomienda:
SELECT cli_codigo
FROM cliente
WHERE SUBSTRING(cli_apellido_paterno,1,1) = 'M'

Se recomienda:
SELECT cli_codigo
FROM cliente
WHERE cli_apellido_paterno like 'M%'

----------------------------------------------
   
Optimizaciones Comunes:

Funciones y expresiones que eliminan el uso deíndices.
En muchos casos, el optimizador de consultas no puede utilizar índices de las columnas de la tabla cuando se aplican funciones o expresiones a la columna indexada. Si fuera el caso se debería re-escribir la consulta.

Ejemplo:
En todos los casos la columna referida “en el WHERE” es una columna con índice del tipo UNIQUE CLUSTERED INDEX; se indican los campos con SELECT * sólo con fines...
tracking img