Dapper y SQL Server: consultas lentas por conversión

Fuentes: Dapper Queries Can Silently Damage SQL Server Index Performance

Una reciente investigación sobre un problema de rendimiento en una aplicación .NET reveló una causa inesperada: consultas Dapper que dañaban silenciosamente el rendimiento de los índices de SQL Server. El problema surge cuando una columna en la base de datos es de tipo varchar pero Dapper, al usar cadenas C# a través de objetos anónimos, las mapea a nvarchar(4000), forzando a SQL Server a convertir cada valor antes de la comparación, impidiendo el uso del índice (un 'CONVERT_IMPLICIT'). Esto resulta en un escaneo completo de la tabla en lugar de una búsqueda de índice, generando un aumento significativo en el consumo de CPU. La solución es simple: especificar explícitamente el tipo de parámetro como varchar usando DbType.AnsiString o DbString con la propiedad IsAnsi = true. Esta corrección, que implica un cambio mínimo en el código, puede transformar un escaneo de índice en una búsqueda, reduciendo drásticamente el tiempo de ejecución y el uso de recursos. Se recomienda auditar las consultas Dapper que utilizan cadenas C# y documentar claramente las razones detrás del uso de DynamicParameters para evitar futuras regresiones.