una - SQL Server: ¿columnas de índice utilizadas en like?
tamaño de todas las bases de datos sql server (3)
¿Es una buena idea indexar las columnas varchar solo usadas en las opertaciones LIKE? De lo que puedo leer en el análisis de consultas, obtengo de la siguiente consulta:
SELECT * FROM ClientUsers WHERE Email LIKE ''%niels@bosmainter%''
Obtengo un "Costo de subárbol estimado" de 0.38 sin ningún índice y 0.14 con un índice. ¿Es esta una buena métrica para anlayzing si una consulta ha sido optimizada con un índice?
En mi experiencia, el primer% -sign hará que cualquier índice sea inútil, pero uno al final usará el índice.
Para responder a la parte de las métricas de su pregunta: El tipo de exploración / búsqueda de índice / tabla que se está realizando es un buen indicador para saber si se está usando (correctamente) un índice. Por lo general, se muestra en la parte superior del analizador de planes de consultas.
Los siguientes tipos de búsqueda / búsqueda se ordenan del peor (arriba) al mejor (abajo):
- Escaneo de tabla
- Escaneo de índice agrupado
- Escaneo de índice
- Búsqueda de índice agrupado
- Búsqueda de índice
Como regla general, normalmente tratará de obtener búsquedas sobre escaneos siempre que sea posible. Como siempre, hay excepciones según el tamaño de la tabla, las columnas consultadas, etc. Recomiendo hacer una búsqueda en para "índice de búsqueda de escaneo", y obtendrá mucha información útil sobre este tema.
Teniendo en cuenta los datos ''abcdefg''
WHERE Column1 LIKE ''%cde%'' --can''t use an index
WHERE Column1 LIKE ''abc%'' --can use an index
WHERE Column1 Like ''%defg'' --can''t use an index, but see note below
Nota: Si tiene consultas importantes que requieren ''% defg'', puede usar una columna calculada persistente donde REVERSE () la columna y luego indexarla. Tu puede entonces consultar en:
WHERE Column1Reverse Like REVERSE(''defg'')+''%'' --can use the persistent computed column''s index