Potencialmente puede ver mejoras en el rendimiento mediante la adición de índice (es), que depende mucho de las características específicas :)
¿Qué parte del tamaño total de la fila son sus columnas hendidas? ¿Cuántas filas espera que coincidan? ¿Necesita devolver todas las filas que coincidan con el predicado, o solo la parte superior 1 o las n filas superiores?
Si está buscando valores con alta selectividad/unicidad (tan pocas filas para devolver), y las columnas predicadas son una porción más pequeña de todo el tamaño de fila, un índice podría ser bastante útil. Seguirá siendo un análisis, pero su índice se ajustará a más filas por página que la tabla de origen.
Aquí se muestra un ejemplo en el que el tamaño total de la fila es mucho mayor que el tamaño de la columna para buscar a través de:
create table t1 (v1 varchar(100), b1 varbinary(8000))
go
--add 10k rows of filler
insert t1 values ('abc123def', cast(replicate('a', 8000) as varbinary(8000)))
go 10000
--add 1 row to find
insert t1 values ('abc456def', cast(replicate('a', 8000) as varbinary(8000)))
go
set statistics io on
go
select * from t1 where v1 like '%456%'
--shows 10001 logical reads
--create index that only contains the column(s) to search across
create index t1i1 on t1(v1)
go
select * from t1 where v1 like '%456%'
--or can force to
--shows 37 logical reads
Si nos fijamos en el plan de ejecución real se puede ver el motor de escaneado del índice e hizo una búsqueda de marcador en la fila correspondiente. O puede decirle directamente al optimizador que use el índice, si no ha decidido usar este plan por su cuenta: seleccione * de t1 con (índice (t1i1)) donde v1 como '% 456%'
Si tiene un grupo de columnas para buscar solo unas pocas que son altamente selectivas, puede crear múltiples índices y usar un enfoque de reducción. P.ej. primero determine un conjunto de ID (o cualquiera que sea su PK) de su índice altamente selectivo, luego busque las columnas menos selectivas con un filtro contra ese pequeño conjunto de PK.
Si siempre necesita devolver un gran conjunto de filas, casi con seguridad obtendrá una mejor exploración de tabla.
Por lo tanto, las posibles optimizaciones dependen mucho de los detalles de la definición de su tabla y la selectividad de sus datos.
HTH! -Adrian
Gracias, eso es lo que pensé desafortunadamente. He eliminado algunas de las cláusulas LIKE para ayudar a acelerar un poco. – schooner