tipos sirven recorrer realizar que para los fast eliminar cursores anidados sql sql-server cursor

sirven - t sql fast forward cursor



¿Cuál es la ventaja de usar FAST_FORWARD para definir un cursor? (5)

(Sé que esto es viejo, pero para la posteridad)

Solo para explicar los cursores "fast_forward" y "forward_only / read_only", la diferencia está en el uso del plan del cursor.

FO/RO cursores FO/RO siempre utilizan un plan de consulta dinámico, y para la mayoría de las aplicaciones, esto es suficiente. Sin embargo, incluso un buen plan dinámico casi nunca es tan bueno como un plan estático.

FF cursores FF utilizarán un plan estático si es mejor, y nunca degradarán los planes del cursor (principalmente a lo que se refiere "... con optimizaciones de rendimiento habilitadas").

En general, los planes dinámicos son más óptimos para cursores de conjuntos de resultados pequeños ("objetivo bajo") y viceversa para estáticos.

¿Cuál es la ventaja de usar FAST_FORWARD para definir un cursor? ¿Es mejor para el rendimiento? ¿por qué?


La definición de MSDN es:

Especifica un cursor FORWARD_ONLY, READ_ONLY con las optimizaciones de rendimiento habilitadas . FAST_FORWARD no puede especificarse si también se especifica SCROLL o FOR_UPDATE. FAST_FORWARD y FORWARD_ONLY se excluyen mutuamente; si se especifica una no se puede especificar la otra.

He negado el bit clave. Puede admitir estas "optimizaciones de rendimiento" porque no necesita admitir la iteración multidireccional a través del cursor (FORWARD_ONLY) y no admite modificaciones (READ_ONLY).

Por supuesto, si realmente no necesita usar un cursor, entonces usar un cursor incluso con esta opción no funcionará tan bien. Si puede hacer la misma tarea utilizando un enfoque basado en conjuntos, hágalo en su lugar: esta es la parte que realmente quería enfatizar.


Solo ten en cuenta que FAST_FORWARD es DINÁMICO ... FORWARD_ONLY que puedes usar con un cursor ESTÁTICO.

Trate de usarlo en el problema de Halloween para ver qué pasa !!!

IF OBJECT_ID(''Funcionarios'') IS NOT NULL DROP TABLE Funcionarios GO CREATE TABLE Funcionarios(ID Int IDENTITY(1,1) PRIMARY KEY, ContactName Char(7000), Salario Numeric(18,2)); GO INSERT INTO Funcionarios(ContactName, Salario) VALUES(''Fabiano'', 1900) INSERT INTO Funcionarios(ContactName, Salario) VALUES(''Luciano'',2050) INSERT INTO Funcionarios(ContactName, Salario) VALUES(''Gilberto'', 2070) INSERT INTO Funcionarios(ContactName, Salario) VALUES(''Ivan'', 2090) GO CREATE NONCLUSTERED INDEX ix_Salario ON Funcionarios(Salario) GO -- Halloween problem, will update all rows until then reach 3000 !!! UPDATE Funcionarios SET Salario = Salario * 1.1 FROM Funcionarios WITH(index=ix_Salario) WHERE Salario < 3000 GO -- Simulate here with all different CURSOR declarations -- DYNAMIC update the rows until all of then reach 3000 -- FAST_FORWARD update the rows until all of then reach 3000 -- STATIC update the rows only one time. BEGIN TRAN DECLARE @ID INT DECLARE TMP_Cursor CURSOR DYNAMIC --DECLARE TMP_Cursor CURSOR FAST_FORWARD --DECLARE TMP_Cursor CURSOR STATIC READ_ONLY FORWARD_ONLY FOR SELECT ID FROM Funcionarios WITH(index=ix_Salario) WHERE Salario < 3000 OPEN TMP_Cursor FETCH NEXT FROM TMP_Cursor INTO @ID WHILE @@FETCH_STATUS = 0 BEGIN SELECT * FROM Funcionarios WITH(index=ix_Salario) UPDATE Funcionarios SET Salario = Salario * 1.1 WHERE ID = @ID FETCH NEXT FROM TMP_Cursor INTO @ID END CLOSE TMP_Cursor DEALLOCATE TMP_Cursor SELECT * FROM Funcionarios ROLLBACK TRAN GO


FAST_FORWARD especifica que es FORWARD_ONLY y READ_ONLY , lo que significa que usa la menor cantidad de recursos del servidor para manejarlo ... así que sí, para el rendimiento.

MSDN tiene un resumen completo de opciones de cursor aquí .

AVANCE RÁPIDO

  • Especifica un cursor FORWARD_ONLY, READ_ONLY con las optimizaciones de rendimiento habilitadas. FAST_FORWARD no se puede especificar si también se especifica SCROLL o FOR_UPDATE.

FAST_FORWARD : especifica que el cursor será el cursor FORWARD_ONLY y READ_ONLY. Los cursores FAST_FORWARD producen la menor cantidad de sobrecarga en SQL Server.

Fuente: Haga clic aquí