Cursore (database)
Un puntatore a un result set che permette di leggere le righe a porzioni anziché tutte insieme. Esiste perché una query che restituisce dieci milioni di righe altrimenti dovrebbe stare nella memoria del client.
Con DECLARE e FETCH il server tiene traccia della posizione e il client può scorrere qualsiasi quantità di dati con un uso di memoria costante. È lo strumento giusto per grandi esportazioni e job di migrazione. Il prezzo è che il cursore vive dentro una transazione che deve restare aperta per tutta la lettura, e una transazione di lunga durata blocca la pulizia delle righe morte, una delle cause più comuni di bloat nei database. Per la paginazione in un'interfaccia utente i cursori sono quasi sempre la scelta sbagliata: lì serve la paginazione keyset con WHERE id > last, che non mantiene stato e non rallenta andando più indietro.