Cursores mistos
Um cursor misto é uma combinação de um cursor controlado por conjunto de chaves e um cursor dinâmico. Ele é usado quando o conjunto de resultados é grande demais para salvar razoavelmente as chaves de todo o conjunto de resultados. Os cursores mistos são implementados criando um conjunto de chaves menor que todo o conjunto de resultados, porém maior que o conjunto de linhas.
Contanto que o aplicativo role dentro do conjunto de chaves, o comportamento é controlado pelo conjunto de chaves. Quando o aplicativo rola para fora do conjunto de chaves, o comportamento é dinâmico: o cursor busca as linhas solicitadas e cria um conjunto de chaves. Depois que o conjunto de chaves é criado, o comportamento é revertido para controlado por conjunto de chaves dentro desse conjunto de chaves.
Por exemplo, suponha que um conjunto de resultados tenha mil linhas e use um cursor misto com um tamanho de conjunto de chaves de 100 e um tamanho de conjunto de linhas de 10. Quando o primeiro conjunto de linhas é buscado, o cursor cria um conjunto de chaves que consiste nas chaves para as primeiras 100 linhas. Então ele retorna as primeiras 10 linhas, conforme solicitado.
Agora suponha que outro aplicativo exclua as linhas 11 e 101. Se o cursor tentar recuperar a linha 11, ele encontrará uma lacuna porque tem uma chave para essa linha, mas não existe nenhuma linha. Esse é um comportamento controlado por conjunto de chaves. Se o cursor tentar recuperar a linha 101, ele não detectará que a linha está ausente porque não tem uma chave para a linha. Em vez disso, ele recuperará o que antes era a linha 102. Este é o comportamento cursor dinâmico.
Um cursor misto é equivalente a um cursor controlado por conjunto de chaves quando o tamanho do conjunto de chaves é igual ao tamanho do conjunto de resultados. Um cursor misto equivale a um cursor dinâmico quando o tamanho do conjunto de teclas é igual a 1.