2009-09-07 18 views
20

¿Es una buena idea indexar columnas varchar solo usadas en las opertaciones LIKE? Por lo que puedo leer de análisis de consultas que recibo de la siguiente consulta:SQL Server: columnas de índice utilizadas en like?

SELECT * FROM ClientUsers WHERE Email LIKE '%[email protected]%' 

me sale un "costo estimado subárbol" 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?

Respuesta

48

Teniendo en cuenta los datos de los 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 usted tiene preguntas importantes que requieren '% defg', se puede usar una columna persistente computarizada donde inversa() de la columna, índice de él. Su puede consultar en:

WHERE Column1Reverse Like REVERSE('defg')+'%' --can use the persistent computed column's index 
+3

Me gusta su solución, aunque yo' d lo llamo un hack feo;) – idstam

+7

He usado este feo hack en un sistema en el que el diseñador original crea números char (x) con ceros a la izquierda y otras teclas con letras + ceros a la izquierda. intenta decirle a los usuarios que deben ingresar los ceros a la izquierda y/o la letra + los ceros a la izquierda. decir ah. quieren ingresar en 203, no en G000000203, por lo que este "truco" inverso() lo ayudará allí. –

+0

@KM. hace referencia a esta respuesta aquí: http://dba.stackexchange.com/questions/91340/1-hour-query-is-there-another-way-to-do-this/91346#91346 – DForck42

8

En mi experiencia, el primer% -sign hará que cualquier índice sea inútil, pero uno al final usará el índice.

+0

Lo suficientemente cerca - LIKE usará el prefijo en un índice pero no puede resolver un comodín a través de un índice, así que es todo lo que puede. – ConcernedOfTunbridgeWells

+0

¿Qué tal o no para los índices en estas columnas? –

+1

Si siempre consulta la columna con un% inicial, el índice nunca se usará. La respuesta depende de cómo consultas tus datos. –

2

Para responder a la parte de las métricas de su pregunta: El tipo de búsqueda/búsqueda de índice/tabla 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. La siguiente exploración/buscan tipos se clasifican de la peor (arriba) para mejor (inferior):

  • Tabla Scan
  • índice agrupado Scan
  • recorrido del índice
  • índice agrupado Seek
  • búsqueda de índice

Como regla general, normalmente tratará de obtener búsquedas sobre escaneos siempre que sea posible. Como siempre, hay excepciones en función del tamaño de la tabla, columnas consultadas, etc. Recomiendo hacer un search on StackOverflow para "índice de búsqueda de escaneo", y obtendrá mucha información útil sobre este tema.

Cuestiones relacionadas