Anda di halaman 1dari 3

Consejos para crear y optimizar consultas en SQL

De nada servira tener una base de datos (BBDD) si no pudiramos


consultarla. Por eso, el proceso ms importante que se debe llevar a
cabo en cualquiera es la consulta de la informacin almacenada. Como su
nombre indica, Microsoft SQL Server es una herramienta que nos permite,
precisamente, gestionar la informacin almacenada en la
BBDD.Para garantizar un acceso rpido y eficaz los datos que almacenan
tus bases de datos, aqu tienes algunos consejos de cmo realizar consultas
en SQL.
1. Uso de cursores
Si la consulta utiliza cursores, determina antes si es posible escribirla con un
tipo de cursor ms eficaz (uno de avance rpido) o con una nica consulta.
Las consultas nicas mejoran las operaciones de cursor.
Dado que un conjunto de instrucciones de cursor suele constituir una
operacin de bucle externo, en la que cada fila se procesa una vez con una
instruccin interna, puedes contemplar la posibilidad de usar en su lugar
una instruccin GROUP BY o CASE. Quiz incluso una subconsulta.
2. Uso de alias
Utilizar varios alias para una sola tabla en la misma consulta para simular la
interseccin de ndices ya no es necesario. SQL Server tiene en cuenta
automticamente la interseccin de ndices y puede utilizar varios en la
misma tabla.
3. Uso de la parametrizacin
Utiliza la parametrizacin de consultas para permitir la reutilizacin de los
planes de ejecucin de consulta almacenados en la memoria cach. Si un
conjunto de consultas comparte el mismo hash de consulta y hash de plan
de consulta podras mejorar el rendimiento creando una consulta
parametrizada.
Adems, si llamas a una consulta con parmetros, en lugar de a varias
consultas con valores literales, podrs reutilizar el plan de ejecucin de
consulta almacenado en la memoria cach.
4. Uso de Exists
Cuando queramos hacer una sub-consulta en una base de datos utilizando
la sentencia NOT IN, analicemos si podemos cambiar nuestro queries con el
uso de la sentencia Exists que es mucho ms eficiente que la anterior. O en
todo caso, utilizar IN en vez de NOT IN, ya que esto hace un escaneo
completo en la tabla descartando opciones a omitir.
5. Uso de Distinct
Utilizar distinct para excluir datos duplicados es muy usado por los
programadores para evitar errores de diseo de base de datos y as
esconder algunos duplicidad de informacin, pero esto es un grave error. Es
una de las sentencias que ms necesita hacer I/O en el disco y forzar
bastante el procesador. Por tal motivo, si no es necesario evitemos utilizarla.

6. Uso de Tops
Cuando se quiere traer un grupo de registros es mejor utilizar la sentencia
Top y no Rowcount, ya que esta ltima presenta inconvenientes con listas no
ordenadas. En cambio, si la lista es ordenada es ms eficiente que la
sentencia Top.
7. Uso de*.
Cuando se realizan consultas que van a devolver muchos campos es mejor
definir todos los campos que queremos devolver en nuestro queries, ya que
el uso de * o All impide el uso de ndices de forma eficiente.
8. Verificar si existe un registro
Muchos programadores utilizan el count(*) para ver si un registro existe en
la base de datos, pero una forma ms eficiente de hacerlo es con Exists.
Cuando ste encuentra un registro detiene la bsqueda del mismo.
9. Uso de ORDER BY
Usar ORDER BY en las QUERIES que se lancen slo si es absolutamente
indispensable. Es decir, que si es posible realizar la ordenacin en el lado
del cliente siempre ser mejor que realizarla desde el lado del servidor SQL
Server.
En caso de que sea absolutamente necesario realizar la ordenacin en el
lado del servidor SQL Server deberemos atender a las siguientes
recomendaciones:
1. Mantener el nmero de filas a ordenar al mnimo
2. Mantener el nmero de columnas a ordenar al mnimo
3. Mantener el ancho (tamao fsico) de las columnas a ordenar al
mnimo
4. Ordenar columnas con datos numricos (NO tipos de datos carcter)
Cuando usemos cualquier mecanismo de ordenacin en Transact SQL,
debemos tener en mente todas estas recomendaciones para la mejora del
rendimiento.
Si se ha de ordenar por una columna a menudo, debemos considerar el
realizar un Clustered Index sobre esa columna para la mejora del
rendimiento.
10. No usar el comando GROUP BY
No usarlo al menos sin una funcin de agregacin. La clusula GROUP BY
puede usarse con o sin una funcin de agregacin. Pero si queremos
obtener un mejor rendimiento, no usaremos la clusula GROUP BY sin una
funcin de agregacin. Esto es porque produce el mismo resultado usar
DISTINCT y es ms rpido.
Para acelerar el uso de la clusula GROUP BY debemos seguir las siguientes
recomendaciones:
1. Mantener al mnimo el nmero de filas a devolver por la Query.

2. Mantener al mnimo el nmero de agrupaciones


3. No agrupar columnas redundantes
4. Cambiar un JOIN por una SUBQUERY cuando hay uno en la misma
SELECT que tiene un GROUP BY.
Si es posible hacer esto, el rendimiento ser mayor. Si se tiene que
usar un JOIN, intentaremos hacer el GROUP BY por columna desde la
misma tabla que la columna o columnas sobre la cual la se usa la
funcin

Anda mungkin juga menyukai