Tengo algunos problemas al ejecutar sp_executesql en una tabla de base de datos. Estoy usando un ORM (NHibernate) que genera una consulta SQL que consulta una tabla en este caso. Esta tabla tiene alrededor de 7 millones de registros y está altamente indexada.sp_executesql que hace que mi consulta sea muy lenta
Cuando ejecuto la consulta que el ORM escupe sin el sp_executesql, se ejecuta muy rápido y profiler muestra que tiene 85 lecturas. Cuando ejecuto la misma consulta utilizando sp_executesql, tiene alrededor de 201.828 lecturas.
¿Hay algo que deba hacer en mi servidor SQL para mejorar el rendimiento de ejecutar la consulta sin sp_exectuesql? Parece como si no estuviera usando mis Índices.
¿Cuál es la mejor manera de solucionar este problema? Si es posible, preferiría no cambiar la forma en que el ORM está generando el SQL sino solucionar el problema en el nivel de SQL Server/base de datos porque parece que ahí es donde está el problema. Supongo que necesito hacer más optimización en la base de datos para solucionar este problema, simplemente no sé qué.
exec sp_executesql N'SELECT top 20
this_.Id as Id0_0_,
this_.Application as Applicat2_0_0_,
this_.[Context] as column3_0_0_,
this_.Logger as Logger0_0_,
this_.Message as Message0_0_,
this_.Exception as Exception0_0_,
this_.Thread as Thread0_0_,
this_.[Level] as column8_0_0_,
this_.LogDate as LogDate0_0_,
this_.SessionId as SessionId0_0_
FROM LogMessages this_
WHERE this_.[Context] = @p0',
N'@p0 nvarchar(2)',
@p0 = N'55'
Contexto es un varchar (255). Este campo es de forma muy libre. No siempre es un número entero y la longitud puede muy. En este caso, yo estoy consultando por un valor de '55', pero podría fácilmente ser Consultando 'Foooooobaaaarrr'
¿Qué versión de SQL Server? ¿Cómo se ve la consulta? –
sin ver ningún código, solo podemos adivinar – SQLMenace
SQL Server 2008 – Rob