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: 12044|Respuesta: 0

[Comunicación] Problema de utilización del índice cuando SQL Servers maneja como '%keyword%'

[Copiar enlace]
Publicado en 26/11/2014 15:52:19 | | | |

Declaración 1: El prefijo comodín de porcentaje % de signo hará que las consultas SQL detengan el índice y en su lugar utilicen el escaneo completo de tablas. Esta afirmación es popular

La conclusión es incorrecta

De hecho, esta afirmación no es muy precisa. El prefijo comodín % hará que la búsqueda SQL de índices sea extremadamente eficiente, pero en la mayoría de los casos seguirá llegando al índice (no se requiere un índice completo, solo construye un índice normal).

CREAR UN ÍNDICE NO AGRUPADO [NOMBRE Ix_index] EN [dbo]. [wkf_ Nombre de la mesa]
(
[db_title]  ASC
)

Ejecutar en este momento

SELECT top 10 [db_id],[db_Summary],[db_AddDate],[db_title] DE [nombre de la biblioteca]. [dbo]. [wkf_database] donde [db_title] como '%dba%' ordenan por 1 desc

El plan de consulta se muestra claramente

Antes de que se indexe la comparación:


Como excepción, consultas complejas El optimizador de consultas puede abandonar el índice en favor del escaneo completo de tablas. Esto no solo ocurre con LIKE '%keyword%', sino también relacionado con la complejidad de la consulta




Declaración 2: Los prefijos porcentual de wildcard harán que las consultas SQL indexen en lugar de no indexar nada

Esta afirmación es muy parcial, y el 99% del índice reducirá las IO y mejorará la eficiencia en comparación con no indexar, pero la acción de emparejamiento de claves tras encontrar el índice también consume en parte el rendimiento. Como se muestra en las dos figuras anteriores, si las palabras clave se emparejan fácilmente, el escaneo completo de la tabla encuentra rápidamente los datos, y el escaneo de índices no ahorra suficiente tiempo para compensar el tiempo que consume la acción de coincidencia de claves (la mayoría de las consultas online no tienen este problema).
Tratamiento:
1. Si no te importa, el consumo extra de rendimiento no es muy grande. Y diferentes palabras clave tienen un consumo distinto, pero algunas tienen este problema y pueden ignorarse
2. Una mejor forma es construir un índice de anulación (también conocido como índice INCLUDE) si las condiciones lo permiten. Premisa: a. El espacio de almacenamiento es suficiente, b no afecta significativamente a las operaciones DML, y c no tiene campos grandes en el índice sobreescrito

CREAR UN ÍNDICE NO AGRUPADO [NOMBRE Ix_index] EN [dbo]. [wkf_ Nombre de la mesa]
(
[db_title]  ASC
)
INCLUYE ( [db_id], db_Summary],[db_AddDate])

Por ahora, el plan de consulta de ejecución es el siguiente, lo cual resulta mucho más refrescante


Lo anterior es lo que se me ocurre ahora para el procesamiento de SQLSERVER SELECCIONA * DESDE NOMBRE DE TABLA, COMO '%Keyword %'






Anterior:La replicación de transacciones SQL Server añade nuevas tablas sin reinicialización
Próximo:Declaración práctica de SQL: estimación de fecha
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