Sobre como escolher um tipo de cursor
A escolha de um tipo de cursor depende de várias variáveis, incluindo:
O tamanho do conjunto de resultados.
A porcentagem provável dos dados necessários.
O desempenho do cursor aberto.
A necessidade de operações do cursor, como rolagem ou atualizações posicionadas.
O nível de visibilidade para modificações de dados feitas por outros usuários.
As configurações padrão serão boas para um conjunto de resultados pequeno, se nenhuma atualização for realizada, mas um cursor dinâmico é preferível para um conjunto de resultados grande, no qual o usuário provavelmente localizará uma resposta antes de recuperar muitas linhas.
Se os dados a serem recuperados serão consumidos todos de uma vez, e não houver necessidade de atualizações posicionadas ou de rolagem, conjuntos de resultados padrão são recomendados. O SQL Server remove a restrição que impedia ter mais de um conjunto de resultados padrão pendente, ao usar MARS (vários conjuntos de resultados ativos).
Regras para escolher um tipo de cursor
Algumas regras simples a serem seguidas para escolher um tipo de cursor são:
Use conjuntos de resultados padrão quando possível. Se for necessária a rolagem, poderá ser mais eficiente armazenar em cache um conjunto de resultados pequeno no cliente e rolar pelo cache, em vez de pedir ao servidor para implementar um cursor.
Use as configurações padrão ao buscar um conjunto inteiro de resultados no cliente, como ao produzir um relatório. Conjuntos de resultados padrão são o modo mais rápido de transmitir resultados ao cliente.
Não poderão ser usados conjuntos de resultados padrão se o aplicativo estiver usando atualizações posicionadas.
Devem ser usados conjuntos de resultados padrão para qualquer instrução Transact-SQL ou lote de instruções Transact-SQL que gerarão vários conjuntos de resultados.
Cursores dinâmicos abrem mais rapidamente do que cursores estáticos ou controlados por conjunto de chaves. Devem ser construídas tabelas de trabalho temporárias internas quando são abertos cursores estáticos e controlados por conjunto de chaves, mas elas não são necessárias para cursores dinâmicos.
Em junções, cursores controlados por conjunto de chaves e cursores estáticos podem ser mais rápidos que cursores dinâmicos.
Devem ser usados cursores controlados por conjunto de chaves ou estáticos se você desejar fazer buscas absolutas.
Cursores estáticos e controlados por conjunto de chaves aumentam o uso de tempdb. Cursores estáticos de servidor constroem o cursor inteiro em tempdb. Cursores controlados por conjunto de chaves constroem o conjunto de chaves em tempdb.
Se um cursor precisar permanecer aberto durante uma operação de reversão, use um cursor estático síncrono e defina CURSOR_CLOSE_ON_COMMIT como OFF.
Cada chamada para uma função ou método de busca de API provoca uma viagem de ida e volta ao servidor quando cursores de servidor são usados. Aplicativos devem minimizar estas viagens de ida e volta usando cursores de bloco com um número razoavelmente grande de linhas retornadas em cada busca.