Elegir un tipo de cursor
La elección de un tipo de cursor depende de múltiples variables, que incluyen:
- Tamaño del conjunto de resultados.
- Porcentaje de los datos que seguramente serán necesarios.
- Rendimiento del cursor abierto.
- Necesidad de operaciones de cursor, como desplazamiento o actualizaciones posicionadas.
- Nivel de visibilidad de las modificaciones de datos realizadas por otros usuarios.
La configuración predeterminada funciona bien con pequeños conjuntos de resultados si no se realizan actualizaciones, pero se prefiere un cursor dinámico para grandes conjuntos de resultados en los que es probable que el usuario encuentre una respuesta antes de recuperar muchas filas.
Si los datos que se deben recuperar se consumirán todos a la vez, y no hay necesidad de desplazamiento o actualizaciones posicionadas, se recomienda el uso de conjuntos de resultados predeterminados. Microsoft SQL Server 2005 elimina la restricción que impedía tener más de un conjunto de resultados predeterminado pendiente cuando se utilizan varios conjuntos de resultados activos (MARS).
Reglas para elegir un tipo de cursor
A continuación se enumeran algunas reglas sencillas para elegir un tipo de cursor:
- Utilice los conjuntos de resultados predeterminados siempre que sea posible. Si el desplazamiento es necesario, seguirá siendo más eficaz guardar en la caché un conjunto pequeño de resultados en el cliente y desplazarse a través de la caché que pedir al servidor que implemente un cursor.
- Utilice la configuración predeterminada cuando recopile un conjunto de resultados completo en el cliente, como cuando se produce un informe. Los conjuntos de resultados predeterminados constituyen la forma más rápida de transmitir datos al cliente.
- No se pueden utilizar conjuntos de resultados predeterminados si la aplicación utiliza actualizaciones posicionadas.
- Se deben utilizar conjuntos de resultados predeterminados para cualquier instrucción Transact-SQL o lote de instrucciones Transact-SQL que generen varios conjuntos de resultados.
- Los cursores dinámicos se abren más rápidamente que los cursores estáticos o los cursores controlados por conjunto de claves. Se deben generar tablas internas para trabajos temporales cuando se abren cursores estáticos y cursores controlados por conjunto de claves, pero no se necesitan en los cursores dinámicos.
- En las combinaciones, los cursores controlados por conjunto de claves y los cursores estáticos pueden ser más rápidos que los cursores dinámicos.
- Utilice cursores controlados por conjunto de claves o cursores estáticos si desea realizar recopilaciones absolutas.
- Los cursores estáticos y los cursores controlados por conjunto de claves aumentan la utilización de tempdb. Los cursores de servidor estáticos generan el cursor completo en tempdb; los cursores controlados por conjunto de claves generan el conjunto de claves en tempdb.
- Si un cursor debe permanecer abierto durante una operación de revertir, utilice un cursor estático sincrónico y desactive CURSOR_CLOSE_ON_COMMIT.
Cada vez que se llama una función o método de recopilación de la API, se efectúa un viaje de ida y vuelta al servidor si se utilizan cursores de servidor. Las aplicaciones deben minimizar estos viajes de ida y vuelta mediante la utilización de cursores de bloque con un número razonablemente grande de filas devueltas en cada recopilación.
Vea también
Conceptos
Tipos de cursores (motor de base de datos)