Esta pregunta está relacionada con mi vieja pregunta . La consulta a continuación tardaba entre 10 y 15 segundos en ejecutarse:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE (Charindex('123456789',CAST([company].dbo.[customer].[Phone no] AS VARCHAR(MAX)))>0)
En algunos artículos, vi que usar CAST
y CHARINDEX
no se beneficiará de la indexación. También hay algunos artículos que dicen que el uso LIKE '%abc%'
no se beneficiará de la indexación, mientras LIKE 'abc%'
que:
http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement-for -like-queries http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568
En mi caso, puedo reescribir la consulta como:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
Esta consulta da el mismo resultado que la anterior. He creado un índice no agrupado para la columna Phone no
. Cuando ejecuto esta consulta, se ejecuta en solo 1 segundo . Este es un gran cambio en comparación con los 14 segundos anteriores.
¿Cómo se LIKE '%123456789%'
beneficia la indexación?
¿Por qué los artículos enumerados indican que no mejorará el rendimiento?
Intenté reescribir la consulta para usarla CHARINDEX
, pero el rendimiento sigue siendo lento. ¿Por qué no CHARINDEX
se beneficia de la indexación como parece que lo hace la LIKE
consulta?
Consulta usando CHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
Plan de ejecución:
Consulta usando LIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
Plan de ejecución: