
Hola a todos, en el día de hoy, vamos a hablaros de un parámetro de SQL Server que puede ser útil en determinados casos a la hora de mejorar el rendimiento de un procedimiento almacenado. Se trata de SET NOCOUNT ON. Un procedimiento almacenado, se encarga de ejecutar una serie de acciones de SQL Server cuando se llama a su ejecución. Esta llamada puede ser con o sin parámetros. Estate atento a próximas entradas para ver más en detalle los procedimientos almacenados en SQL Server.
¿Qué es SET NOCOUNT ON?
Es un parámetro de SQL Server que aplica únicamente a la sesión que se está ejecutando. Con esta opción se indica al motor de base de datos, que mientras permanezca activa la sesión donde se ha ejecutado, no cuente las filas afectadas.
¿Qué beneficios obtenemos?

Con esta opción mejoramos el rendimiento de procedimientos almacenados. Es recomendable cuando afectan principalmente a un gran número de registros. También es especialmente útil para casos en los que se usen cursores.
Una vez que ya sabemos la teoría, vayamos a la práctica. Crearemos dos procedimientos almacenados casi idénticos. Ambos se basan en un cursor pero incluiremos la opción SET NOCOUNT ON en uno de ellos.
El primer procedimiento será «TestNoCountON», que incluirá el parámetro que estamos tratando en esta entrada.
CREATE
OR
ALTER
PROCEDURE
TestNoCountON
AS
BEGIN
SET
NOCOUNT ON;
DECLARE
@intFlag INT
SET
@intFlag = 1
WHILE (@intFlag <=100)
BEGIN
SELECT
*
FROM
[WideWorldImporters].[Purchasing].[PurchaseOrderLines]
WHERE
[PurchaseOrderLineID] = @intFlag
SET
@intFlag = @intFlag+1
END
END
GO
El segundo procedimiento, lo crearemos sin este parámetro:
CREATE
OR
ALTER
PROCEDURE
TestNoCountOFF
AS
BEGIN
SET
NOCOUNT OFF;
DECLARE
@intFlag INT
SET
@intFlag = 1
WHILE (@intFlag <=100)
BEGIN
SELECT
*
FROM
[WideWorldImporters].[Purchasing].[PurchaseOrderLines]
WHERE
[PurchaseOrderLineID] = @intFlag
SET
@intFlag = @intFlag+1
END
END
GO
El primero de ellos, con SET NOCOUNT activado, se ejecuta en 6 segundos, mientras que el que lo tiene desactivado, se ejecuta en 16 segundos. Esto se debe a que no «pierde tiempo» incluyendo el número de filas afectadas.
Esperamos que esta entrada os haya servido, en caso contrario, no os preocupéis. Posiblemente, la siguiente puede que sea interesante para vosotros. Para no perderte ninguna, no dudes en apuntar a nuestra newsletter. Con solo un email al mes estarás informado de todas nuestras entradas sobre las bases de datos, Linux y el mundo Open Source. No lo pienses más y suscríbete ahora.
¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.
Sígue a GPS en LinkedIn