Puntos clave que afectan el rendimiento de SQL Server

  

Primero, el diseño de bases de datos lógicas y tablas

El diseño lógico de la base de datos, incluida la relación entre tablas y tablas, es el núcleo de la optimización del rendimiento de las bases de datos relacionales. Un buen diseño lógico de base de datos puede sentar una buena base para optimizar bases de datos y aplicaciones.

El diseño lógico de la base de datos estandarizada implica reemplazar columnas largas de muchas columnas con una tabla grande, interrelacionada y estrecha. Estos son algunos de los beneficios de usar una tabla estandarizada.

A: Debido a la tabla estrecha, puede hacer que la clasificación y la indexación sean más rápidas.

B: Debido a la tabla múltiple, son posibles tantos índices.

C: Un índice más estrecho y más compacto.

D: Puede haber menos índices en cada tabla, por lo que puede mejorar la velocidad de inserción eliminar eliminar, etc., porque estas operaciones tendrán un gran impacto en el rendimiento del sistema en el caso de muchos índices.

E: Menos valores nulos y menos valores adicionales, lo que aumenta la compacidad de la base de datos. Debido a la estandarización, aumenta la complejidad del número de tablas de referencia y la relación de conexión entre ellas al adquirir datos. Demasiadas tablas y conexiones complejas pueden degradar el rendimiento del servidor, por lo que se debe hacer una consideración integral entre los dos.

Las principales cosas a tener en cuenta al definir claves primarias y externas con correlaciones son: la clave primaria utilizada para unir varias tablas y la clave a la que se hace referencia deben tener el mismo tipo de datos.

En segundo lugar, el diseño del índice

A: Intente evitar el escaneo de la tabla

Verifique la cláusula where de su consulta, porque este es el foco importante del optimizador. Cada columna contenida en donde es un posible índice candidato. Para lograr un rendimiento óptimo, considere el siguiente ejemplo: para la columna columna1 que figura en la cláusula where.

¡Las siguientes dos condiciones pueden mejorar el rendimiento de la consulta optimizada del índice!

Primero: hay un solo índice en la columna column1 de la tabla;

Segundo: hay múltiples índices en la tabla, pero column1 es la columna del primer índice.

Evite definir índices múltiples y column1 es el segundo índice o posterior. Dicho índice no puede optimizar el rendimiento del servidor.

Por ejemplo: el siguiente ejemplo utiliza la base de datos pubs.

SELECCIONE au_id, au_lname, au_fname DE los autores

WHERE au_lname = 'White'

Los índices creados en las siguientes columnas serán índices útiles para el optimizador

au_lname

au_lname, au_fname

Los índices creados en las siguientes columnas no funcionarán bien para el optimizador

au_address

au_fname, au_lname

Considere usar un índice estrecho en una o dos columnas. Un índice estrecho es más eficiente que un índice compuesto y de múltiples índices. Con un índice estrecho, habrá más filas y menos niveles de índice en cada página (a diferencia de múltiples índices e índices compuestos), lo que impulsará el rendimiento del sistema. Para los índices de varias columnas, SQL Server mantiene una estadística de densidad (para uniones) en todos los índices de columna y una estadística de histograma (histograma) en el primer índice. Según las estadísticas, si el primer índice en el índice compuesto rara vez se utiliza, el optimizador no utilizará el índice para muchas solicitudes de consulta.

Los índices útiles mejorarán el rendimiento de las declaraciones seleccionadas, incluyendo insertar, actualizar, eliminar. Sin embargo, el cambio del contenido de una tabla afectará al índice. Cada declaración de inserción, actualización y eliminación degradará el rendimiento. Los experimentos han demostrado que no debe usar una gran cantidad de índices en una sola tabla y no debe usar índices superpuestos en columnas compartidas (lo que significa que las restricciones de referencia se usan en varias tablas).

Verifique el número de datos únicos en una columna y compárelos con el número de filas en la tabla. Esta es la selectividad de los datos, y el resultado de esta comparación lo ayudará a decidir si va a utilizar una columna como un índice candidato y, de ser así, qué índice construir. Puede usar la siguiente consulta para devolver el número de valores diferentes en una columna.

seleccione el recuento (distinto nombre de columna) de table_name

Suponiendo que column_name es una tabla de 10000 filas, mire el valor de retorno de column_name para determinar si se debe usar y qué índice se debe usar.

Índice de valores únicos

5000 Índice no agrupado

20 Índice agrupado

3 Sin índice

镞 Selección de índice y no 镞

< 1 > El índice es el orden físico de las filas y el orden de los índices es el mismo. Las páginas de datos reales se incluyen en cada nivel del índice de nivel de página, nivel inferior, etc. Una tabla solo puede tener un índice. Debido a la actualización, la instrucción de eliminación requiere un número relativamente grande de operaciones de lectura, por lo que el índice a menudo puede acelerar tales operaciones. En una tabla con al menos un índice, debe tener un índice.

En los siguientes casos, puede considerar el uso del índice:

Por ejemplo: el número de valores diferentes incluidos en una columna es limitado (pero no muy raro)

La lista de estados de la tabla de clientes enumera los valores abreviados de aproximadamente 50 nombres de estados diferentes. Puede usar el índice 镞.

Por ejemplo: puede usar un 镞 índice para las columnas que devuelven un rango de valores, como las columnas que operan en columnas entre, >, > =, <, < = y así sucesivamente.

seleccione * de ventas donde ord_date entre '5/1/93' y '6/1/93'

Por ejemplo: puede usar un índice for para columnas que devuelven una gran cantidad de resultados al realizar consultas.

SELECCIONAR * DE LA libreta de teléfonos WHERE last_name = 'Smith'

Cuando se inserta una gran cantidad de filas en la tabla, evite una columna que crezca naturalmente en esta tabla (por ejemplo, la columna de identidad) Crear un índice en él. Si crea un índice defectuoso, el rendimiento de la inserción se reducirá en gran medida. Debido a que cada fila insertada debe ir a la última página de la tabla, la última página de datos de la tabla.

Cuando se está insertando un dato (cuando esta página está bloqueada), todas las demás líneas insertadas deben esperar hasta que la inserción actual haya finalizado.

La página de la hoja de un índice incluye las páginas de datos reales, y el orden de las páginas de datos en el disco duro es el mismo que el orden lógico del índice.

< 2 > Un índice no es que el orden físico de las filas es diferente del orden de los índices. Un nivel de hoja no indexado 镞 contiene punteros a páginas de datos de fila.

Puede haber múltiples índices no en una tabla, y puede considerar el uso de índices no en los siguientes casos.

en muchos valores diferentes en un índice de la columna puede ser considerado como un no-punta de flecha


Por ejemplo: un part_id que aparece en una parte de la mesa

select * Desde el empleado donde emp_id = 'pcm9809f'

puede considerar el uso de un índice on en una columna con una cláusula orden por en una declaración de consulta.

Tercero, el diseño de la declaración de consulta

El optimizador de SQL Server a través del análisis de las declaraciones de consulta, optimiza automáticamente la consulta y determina la implementación más efectiva. El optimizador analiza la consulta para determinar qué cláusula se puede optimizar y selecciona un índice útil para las cláusulas que se pueden optimizar para la consulta. Finalmente, el optimizador compara todos los escenarios posibles de ejecución y elige el más eficiente.

Al ejecutar una consulta, use una cláusula where para limitar el número de filas que se deben procesar. A menos que lo necesite, debe evitar leer y procesar todas las filas de forma indefinida en una sola tabla.

Por ejemplo, el siguiente ejemplo,

seleccionar cantidad de ventas donde stor_id = 7131

es muy eficiente que la siguiente consulta ilimitada

seleccionar cantidad Desde ventas

Evite devolver una gran cantidad de conjuntos de resultados a la selección final de datos del cliente. Es más eficiente permitir que SQL Server ejecute una función que cumpla su propósito de limitar el tamaño del conjunto de resultados.

Esto reduce la E /S de la red y mejora el rendimiento de la aplicación para la concurrencia relacionada con múltiples usuarios. Debido a que el foco del optimizador es la consulta de la cláusula where para aprovechar el índice útil. Cada índice en la tabla puede convertirse en un índice candidato incluido en la cláusula where. Para obtener el mejor rendimiento, siga el índice a continuación para una columna dada, columna1.

Primero: hay un solo índice en la columna column1 en la tabla;

Segundo: hay múltiples índices en la tabla, pero column1 es el primer índice de la columna, no en el sub donde Utilice una consulta sin el índice de columna column1 en la oración y evite indexar el índice no primero con un índice múltiple en la cláusula where.

En este punto, los índices múltiples son inútiles.

Por ejemplo, dado un índice de varias columnas en el au_lname,

au_fname columnas de la tabla de autores en

la base de datos de pubs,

La siguiente declaración de consulta Aproveche el índice en au_lname

SELECCIONE au_id, au_lname, au_fname DE los autores

DONDE au_lname = 'Blanco'

Y au_fname = 'Johnson'

SELECCIONE au_id, au_lname, au_fname DE los autores

WHERE au_lname = 'White'

La siguiente consulta no utiliza un índice porque usa un índice de múltiples índices de un índice no primero

SELECCIONA au_id, au_lname, au_fname DE los autores

DONDE au_fname = 'Johnson'

Copyright © Conocimiento de Windows All Rights Reserved