una tabla secundarios nonclustered indice index ejemplos ejemplo create crear consultar clustered sql-server sql-server-2008 indexing full-text-indexing database-optimization

sql-server - tabla - indices secundarios sql server



¿La indexación mejorará el rendimiento de consultas varchar(max) y cómo crear índices? (4)

En primer lugar, debo señalar que no tengo mucho conocimiento sobre los índices de SQL Server.

Mi situación es que tengo una tabla de base de datos de SQL Server 2008 que tiene una columna varchar (max) generalmente llena de mucho texto.

Mi aplicación web ASP.NET tiene un servicio de búsqueda que consulta esta columna para buscar palabras clave y, dependiendo de la cantidad de palabras clave buscadas, puede haber una o varias declaraciones LIKE ''% keyword%'' en la consulta SQL para realizar la búsqueda.

Mi aplicación web también permite buscar otras columnas en esta tabla, no solo esa columna. También hay algunas combinaciones de otras tablas también.

Mi pregunta es, ¿vale la pena crear un índice en esta columna para mejorar el rendimiento de estas consultas de búsqueda? Y si es así, ¿qué tipo de índice bastará para indexar una columna o debo incluir otras columnas, como la clave principal y otras columnas de búsqueda?


La mejor manera de averiguarlo es crear un conjunto de consultas de prueba que se asemejan a lo que sucedería en la vida real e intentar ejecutarlas en su base de datos con y sin el índice. Sin embargo, en general, si realiza muchas consultas SELECT y pocas consultas UPDATE / DELETE, un índice puede hacer que sus consultas sean más rápidas.

Sin embargo, si realiza muchas actualizaciones, el índice puede dañar su rendimiento, por lo que debe saber qué tipo de consultas tendrá que tratar su BD antes de tomar esta decisión.


no puede crear un índice en un campo varchar (max). La cantidad máxima de bytes en un índice es 900. Si la columna tiene más de 900 bytes, puede crear el índice pero cualquier inserción con más de 900 bytes fallará.

Te sugiero que leas sobre la búsqueda de texto completo. Le conviene en este caso


La mejor analogía que he visto de por qué un índice no ayudará a ''%wildcard%'' búsquedas de ''%wildcard%'' :

Toma dos personas. Déles a cada uno la misma guía telefónica. Dile a la persona a tu izquierda:

Dime cuántas personas hay en esta guía telefónica con el apellido "Smith".

Ahora dile a la persona a tu derecha:

Dime cuántas personas hay en esta guía telefónica con el nombre "Simon".

Un índice es como una guía telefónica. Muy fácil de buscar por lo que está al principio. Es muy difícil buscar lo que está en el medio o al final.

Cada vez que lo repito en una sesión, veo bombillas encendidas, así que pensé que sería útil compartirlas aquí.


No vale la pena crear un índice regular si está haciendo LIKE búsquedas ''% keyword%'' . La razón es que la indexación funciona como buscar un diccionario, donde comienzas en el medio y luego divides la diferencia hasta que encuentres la palabra. Esa consulta de comodín es como pedirle que busque una palabra que contenga el texto "a" o algo así. La única forma de encontrar coincidencias es escanear todo el diccionario.

Sin embargo, podría considerar una búsqueda de texto completo, que es para este tipo de escenario ( ver aquí ).