You are on page 1of 5

Cmo optimizar las consultas (Teora de la Prctica)

Por ServerWatch Personal (Enviar correo ) 07 de agosto 2001

Olivier Perron Este artculo se supone que ya sabes SQL y desea optimizar las consultas.
Los visitantes de esta historia tambin vieron estos artculos patrocinados:

Cmo construir una nube privada: lecciones del mundo real


Implementacin de una nube privada le permite disfrutar de la escalabilidad de la nube junto con la seguridad de su infraestructura en las instalaciones. Pero cul es la mejor manera de disear una solucin que se adapte a su operacin?

Ganar el control de la nube sin perder flexibilidad


Detalles de la encuesta mejoras de rendimiento y ahorro de costes de la nube.

Este artculo es vlido para cualquier consulta de bases de datos SQL-92 y para arriba, tambin es til para la optimizacin de programas que no son de base de datos orientados.

Las razones para optimizar


El tiempo es dinero y la gente no le gusta esperar para que los programas se espera que sea rpido. Con el tiempo, Internet y programacin cliente / servidor, es an ms cierto, porque de repente un montn de gente a la espera de la base de datos para darles una respuesta que hace que el tiempo de respuesta an ms. Incluso si se utiliza ms rpidos servidores, esto ha demostrado ser un factor pequeo en comparacin con la velocidad del algoritmo utilizado. Por lo tanto, la solucin radica en la optimizacin.

Teora de la optimizacin
Hay muchas maneras de optimizar las bases de datos y las consultas. Mi mtodo es el siguiente.

Mira el esquema de base de datos y ver si tiene sentido


Muy a menudo, las bases de datos tienen diseos malos y no se normaliza. Esto puede afectar la velocidad de su base de datos. Como caso general, aprender las 3 formas normales y se aplican en todo momento. Las formas normales por encima de 3 Forma Normal se llama a menudo de-normalizacin formas, pero lo que esto realmente significa es que se rompen algunas reglas para hacer la base de datos ms rpida. Lo que yo sugiero es apegarse a la forma normal, excepto 3 si usted es un DBA (lo que significa que usted sabe las formas posteriores y sabes lo que ests haciendo). Normalizacin despus de la NF 3rd se hace a menudo en un momento posterior, no durante el diseo.

Slo consultar lo que realmente necesita


Filtrar tanto como sea posible

La clusula WHERE es la parte ms importante para la optimizacin. Seleccione slo los campos que necesite Nunca use "Select *" - Especifique slo los campos que necesite, sino que ser ms rpido y utiliza menos ancho de banda. Tenga cuidado con combinaciones Se une son costosos en trminos de tiempo. Asegrese de que utiliza todas las claves que se relacionan las dos tablas y no se unen a las tablas no utilizadas - Siempre trato de unirse en los campos indexados. El tipo de unin es importante tambin (interior, exterior, ...). Optimizar las consultas y procedimientos almacenados (la mayora funcionan primero) Las consultas son muy rpidos. En general, se puede recuperar muchos registros en menos de un segundo, incluso con combinaciones, clasificacin y clculos. Como regla general, si la consulta es ms de un segundo, probablemente pueda optimizarlo. Comience con las consultas que ms se utilizan, as como las consultas que tardan ms tiempo en ejecutarse.

Agregar, quitar o modificar ndices


Si la consulta hace barridos completos de mesa, los ndices y los filtros adecuados puede resolver lo que normalmente es un muy lento proceso. Todas las claves principales ndices necesidad porque hace que se une con mayor rapidez. Esto tambin significa que todas las tablas necesitan una clave primaria. Tambin puede agregar ndices en campos que a menudo utilizan para filtrar en las clusulas WHERE. Especialmente tienes desea utilizar ndices en nmeros enteros, booleanos y Nmeros. Por otro lado, es probable que no desee utilizar ndices en Blobs, VARCHAR y cadenas largas. Tenga cuidado con la adicin de ndices porque tienen que ser mantenidos por la base de datos. Si haces muchos cambios en ese campo, los ndices de mantenimiento puede tardar ms tiempo de lo que ahorra. En el mundo de Internet, de slo lectura mesas son muy comunes. Cuando una tabla es de slo lectura, puede agregar ndices con menor impacto negativo porque los ndices no es necesario que se mantenga (o slo rara vez necesitan mantenimiento).

Mueva Consultas a procedimientos almacenados (SP)


Los procedimientos almacenados son por lo general mejor y ms rpido que las consultas por las siguientes razones: 1. Los procedimientos almacenados se compilan (Cdigo de SQL no es), hacindolas ms rpidas que el cdigo SQL. 2. SP no usar tanto ancho de banda, ya que puede hacer muchas consultas en un SP. SP tambin se mantienen en el servidor hasta que los resultados finales sean devueltos. 3. Los procedimientos almacenados se ejecutan en el servidor, que suele ser ms rpido. 4. Clculos en el cdigo (Visual Basic, Java, C + +, ...) no son tan rpidas como SP en la mayora de los casos. 5. Mantiene su cdigo de acceso DB separado de la capa de presentacin, lo que hace que sea ms fcil de mantener (modelo 3 niveles).

Retire Vistas innecesarios


Las vistas son un tipo especial de consulta - que no son tablas. Ellos son lgicos y fsicos no por lo que cada vez que se ejecuta select * from MyView, se ejecuta la consulta que hace que la vista y la consulta en la vista. Si usted necesita siempre la misma informacin, puntos de vista podra ser bueno. Si usted tiene que filtrar la vista, es como ejecutar una consulta en una consulta - es ms lento.

Ajustar la configuracin de DB
Usted puede ajustar el DB de muchas maneras. Actualizar estadsticas utilizadas por el optimizador, ejecutar las opciones de optimizacin, haga el PP slo lectura, etc .. Para eso se necesita un conocimiento ms amplio de la DB a trabajar y se realiza principalmente por el DBA.

Con Analizadores de consulta


En muchas bases de datos, hay una herramienta para ejecutar y optimizar consultas. SQL Server tiene una herramienta llamada el analizador de consultas, lo cual es muy til para optimizar. Puede escribir consultas, ejecutarlas y, sobre todo, ver el plan de ejecucin. Se utiliza la ejecucin de entender lo que SQL Server lo hace con su consulta.

Optimizacin en la Prctica
Ejemplo 1: Quiero recuperar el nombre y el salario de los empleados del departamento de I + D. Original: Consulta: SELECT * FROM Employees En programa: Agregar un filtro en departamento o el uso de comandos: si Dept = R & D Corregido: Seleccione Nombre, Salario FROM Empleados WHERE Dept = I + D En la versin corregida, los filtros de datos DB porque filtra ms rpido que el programa. Adems, slo se necesita el nombre y sueldo, por lo que slo pido eso. Los datos que viajan por la red ser mucho menor, y por lo tanto sus actuaciones mejorarn. Ejemplo 2 (Clasificacin): Original: Seleccione Nombre, Salario De Empleados Dnde est la I + D 'Dept = Ordenar por Salario Es necesario que la clusula ORDER BY? A menudo, la gente usa ORDER BY en desarrollo para asegurarse de que los datos devueltos estn bien, eliminarlo si no lo necesita. Si necesita ordenar los datos, lo hacen en la consulta, no en el programa. Ejemplo 3: Original: Para i = 1 hasta 2000 Call Query: Select salario de los empleados Dnde EmpID = Parmetro (i) Corregido: Seleccione salario de los empleados Dnde EmpID> = 1 y EmpID <= 2000 La consulta original implica una gran cantidad de ancho de banda y har que todo el sistema lento. Usted debe hacer todo lo posible en el procedimiento de consulta o almacenado. El ir y venir es estpido. Aunque este ejemplo parece sencillo, hay ejemplos ms complejos sobre ese tema. A veces, el proceso es tan grande que creo que es mejor que hacerlo en el cdigo, pero es probable que no. A veces, el procedimiento almacenado ser mejor crear una tabla temporal, insertar datos en ella y devolverla a ir y venir 10.000 veces. Es posible que tenga una consulta ms lento que ahorra tiempo en un mayor nmero de registros o que ahorra ancho de banda. Ejemplo 4 (dbil se une): Usted tiene dos tablas Orders y Clientes. Los clientes pueden tener muchos pedidos. Original: Seleccione O.ItemPrice, C.Name De Pedidos O, los clientes C Corregido: Seleccione O.ItemPrice, C.Name De Pedidos O, los clientes C

Donde O.CustomerID = C.CustomerID En ese caso, la combinacin no estaba all en absoluto o no existe en todas las teclas. Eso volvera tantos discos que su consulta puede tardar horas. Es un error comn para los principiantes. Corregido 2: Dependiendo de la base de datos que utilice, tendr que especificar el tipo de combinacin que desee de diferentes maneras. En SQL Server, la consulta tendra que ser corregida para: Seleccione O.ItemPrice, C.Name De Pedidos O INNER JOIN clientes C ON = O.CustomerID C.CustomerID Elija el tipo de combinacin bueno (interior, exterior, izquierda, ...). Tenga en cuenta que en SQL Server, Microsoft recomienda que utilice las combinaciones como en el Corregida 2 en lugar de las combinaciones en la clusula WHERE, ya que ser ms optimizada. Ejemplo 5 (Filtros dbiles): Este es un ejemplo ms complicado, pero ilustra el filtrado en su mejor momento. Tenemos dos tablas - los productos (ProductID, DescID, precio) y descripcin (DescID, LanguageID, Texto). Hay 100.000 productos y por desgracia nos necesita a todos. Hay 100 lenguas (LangID = 1 = Ingls). Slo queremos que las descripciones de ingls para los productos. Estamos a la espera 100 000 Productos (ProductName, Price). Primer intento: Seleccione D.Text Como ProductName, P.Price Desde P INNER JOIN Productos Descripcin D En P.DescID = D.DescID Cuando D.LangID = 1 Eso funciona, pero ser muy lento debido a su base de datos debe coincidir con 100.000 registros con 10.000.000 registros y luego filtro que dnde LangID = 1. La solucin es filtrar On LangID = 1 antes de unirse a las mesas. Corregido: Seleccione D.Text Como ProductName, P.Price De (Select DescID, el texto de Descripcin Dnde D.LangID = 1) D INNER JOIN Productos P = En D.DescID P.DescID Ahora, que ser mucho ms rpido. Tambin debe asegurarse de que la consulta de un procedimiento almacenado para hacerlo ms rpido. Ejemplo 6 (Visto): Crear vista v_Employees COMO SELECT * FROM Employees Select * From v_Employees Esto es igual que correr SELECT * FROM Employees dos veces. Usted no debe utilizar la vista en ese caso. Si se va a utilizar siempre los datos de los empleados de I + D y no quiere dar los derechos para todas las personas en esa mesa porque los salarios son confidenciales, puede utilizar una vista como la de que: Crear vista v_R y DEmployees COMO Seleccione Nombre, Salario FROM Empleados WHERE Dept = 1 (Dpto. 1 es I + D). A continuacin, se dan los derechos para ver v_R y DEmployees a algunas personas y a limitar los derechos a la tabla Empleados para el DBA solamente. Eso sera un buen uso posible de puntos de vista.

Conclusin

Espero que esto le ayudar a hacer sus consultas ms rpido y las bases de datos ms optimizado.Esto debera hacer que el programa se vea mejor y, posiblemente, puede significar dinero, especialmente para aplicaciones de carga web en las que esto significa que el programa puede atender a ms transacciones por hora y que a menudo se les paga por transaccin. Mientras que usted puede poner los ejemplos anteriores para practicar en la base de datos de la eleccin, los consejos anteriores son especialmente cierto para las principales bases de datos como Oracle o SQL Server.

You might also like