Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 11383|Respuesta: 0

[Comunicación] SQL Server Aprendizaje de Índice Compuesto

[Copiar enlace]
Publicado en 29/1/2015 13:06:03 | | |

Resumen
¿Qué es un índice único y qué es un índice compuesto? ¿Cuándo crear un nuevo índice compuesto y a qué debo prestar atención en el índice compuesto? Este artículo es principalmente un resumen de algunas discusiones en Internet.

Uno. Concepto

Un índice único es una situación en la que el índice se lista en una columna, es decir, la declaración de crear un nuevo índice se implementa en una sola columna.

Los usuarios pueden crear índices en múltiples columnas, que se denominan índices compuestos (índices combinados). Los índices compuestos se crean exactamente de la misma manera que los índices individuales. Pero los índices compuestos requieren menos sobrecarga durante las operaciones de la base de datos y pueden reemplazar múltiples índices individuales. Cuando el número de filas en una tabla es mucho mayor que el número de claves, este método puede acelerar significativamente la velocidad de consulta de la tabla.

Existen dos conceptos al mismo tiempo: índices estrechos e índices amplios; índices estrechos se refieren a índices con 1-2 columnas, y generalmente se refieren a un único índice salvo que se especifique lo contrario. Un índice ancho es un índice con más de 2 columnas.

Un principio importante del diseño de índices es utilizar índices estrechos en lugar de índices amplios, porque los índices estrechos tienden a ser más efectivos que los índices combinados. Tener índices más estrechos dará al optimizador más opciones, lo que a menudo ayuda a mejorar el rendimiento.

Dos. Uso

Crear un índice
Crear el índice IDX1 en la tabla1(col1,col2,col3)  
Preguntar
seleccione * de la tabla 1 donde col1 = A y col2 = B y col3 = C

En este momento, el optimizador de consultas no escanea la tabla, sino que toma directamente los datos del índice, porque hay estos datos en el índice, que se llaman consulta superpuesta, y la velocidad de consulta es muy rápida.   

Tres. Notas:

1. Cuándo usar un índice compuesto
En la condición where, el campo está indexado, y si se usan varios campos, se utiliza un índice compuesto. Generalmente, no construyas ningún índice en el campo select (si quieres consultar select col1, col2, col3 desde mytable, no necesitas el índice anterior). La indexación basada en las condiciones es un principio extremadamente importante. Ten cuidado de no usar demasiados índices, porque esto tendrá un gran impacto en la eficiencia de las actualizaciones de tablas, porque tienes que dedicar mucho tiempo a crear índices al operar tablas.

2. Para índices compuestos, al usar consulta, es mejor seguir el orden de búsqueda de índices, que es el más eficiente. Por ejemplo:  
  IDX1:create index idx1 en la tabla1(col2,col3,col5)  
  select * de la tabla 1 donde col2=A y col3=B y col5=D  

Si es "selecciona * de la tabla1 donde col3=B y col2=A y col5=D"
O "select * from table1 where col3=B" no usará el índice, o el efecto no es perceptible

3. ¿Un índice compuesto reemplazará a un único índice?
Mucha gente piensa que añadir cualquier campo al índice agrupado puede mejorar la velocidad de consulta, pero hay quienes están confundidos: si los campos de índice agrupado agrupados se consultan por separado, ¿se ralentizará la velocidad de consulta? Con esta pregunta, echemos un vistazo a la siguiente velocidad de consulta (el conjunto de resultados es de 250.000 datos) :( columna de fecha fariqi ocupa el primer lugar en la columna inicial del índice de agregación compuesta y el nombre de usuario neibuyonghu es el segundo)

IDX1:create   index   idx1   on   Tgongwen(fariqi,neibuyonghu)  

(1) seleccionar gid, fariqi, neibuyonghu, título de Tgongwen
Dónde Fariqi>'2004-5-5'

Velocidad de consulta: 2513 ms

(2) seleccionar gid, fariqi, neibuyonghu, título de Tgongwen
donde fariqi>'2004-5-5' y neibuyonghu='oficina'

Velocidad de consulta: 2516 ms

(3) seleccionar gid, fariqi, neibuyonghu, título de Tgongwen
donde neibuyonghu='oficina'

Velocidad de consulta: 60280 milisegundos

A partir de los experimentos anteriores, podemos ver que si solo se usa la columna inicial del índice agrupado como condición de consulta, la velocidad de consulta de todas las columnas con el índice agrupado compuesto es casi la misma, incluso ligeramente más rápida que usando todas las columnas del índice compuesto (cuando el número de conjuntos de resultados de consulta es el mismo). Si solo se usan las columnas no iniciales del índice agregado compuesto como condiciones de consulta, este índice no hará nada. Por supuesto, la velocidad de consulta de las sentencias 1 y 2 es la misma porque el número de entradas en la consulta es el mismo; si se usan todas las columnas del índice compuesto y los resultados de la consulta son pocos, esto formará una "anulación de índice", de modo que el rendimiento pueda optimizarse. Además, ten en cuenta que, tanto si usas otras columnas en el índice agregado con frecuencia como si no, la columna inicial debe ser la que se use con más frecuencia.

[Ref: Esquema de optimización de consultas y algoritmo de paginación http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. ¿Necesito crear un único índice y un índice compuesto en la misma columna al mismo tiempo?
Experimento: tabla Sysbase 5.0 tabla1 campos: col1, col2, col3  

Pasos de prueba:  
(1) Crear el índice idx1 en col1  
  Ejecutar select * de la tabla1 donde col1=A usa idx1  
  Ejecuta select * de la tabla1 donde col1=A y col2=B también usan idx1  

(2) Eliminar el índice idx1 y luego crear un idx2 sobre (col1,col2) índice compuesto  
  Ambas consultas usan idx2  

(3) Si existen ambos índices idx1 e idx2  
  No es donde col1='A' usa idx1; donde col1=A y col2=B usa idx2.  
  Su optimizador de consultas utiliza uno de los índices más utilizados anteriormente. Usa idx1 o idx2.  
   
Se puede ver que
(1) Para una tabla, si hay un índice compuesto en (col1, col2), no es necesario crear un único índice en col1 al mismo tiempo.
(2) Si las condiciones de consulta lo requieren, puedes añadir el índice compuesto en (col1, col2) cuando ya existe un único índice en col1, lo que puede mejorar la eficiencia hasta cierto punto.
(3) No hay muchos beneficios particulares en establecer un índice compuesto con múltiples campos (que contienen 5 o 6 campos) al mismo tiempo; relativamente hablando, establecer un índice con múltiples campos estrechos (que contienen solo uno, o como mucho 2 campos) puede lograr una mayor eficiencia y flexibilidad.



5. ¿Necesito cubrir la consulta?
Por lo general, es mejor no emplear una estrategia que se centre en una cobertura completa de la consulta. Si todas las columnas de la cláusula Select son sobrescritos por un índice no agrupado, el optimizador reconocerá esto y proporcionará un buen rendimiento. Sin embargo, esto suele resultar en un índice excesivamente amplio y en una dependencia excesiva de la probabilidad de que el optimizador utilice la política. Normalmente, se utilizan índices estrechos para un mayor número de consultas, lo que proporciona mejor rendimiento para consultas grandes.




Anterior:C# winform previene la inyección SQL
Próximo:Códigos de error y soluciones de Dell Server Edición 2013
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com