A cursor rossz, értem? Nem teljesen…

Igazából értem, miért mondják ezt sokan. Én kicsit finomítanék: ha nem tudjuk jól használni (vagy mert nem tudjuk hogyan, vagy mert az adott helyzet nem teszi lehetővé), akkor rossz lehet.

A vehemens ellenzők azt mondják, hogy egyrészt lassú (az tény, hogy vannak gyorsabb módszerek is), másrészt feleslegesen lockolgatja az adatbázist és ezért másokat is lassúságra kényszerít.

Az elsőre nem tudok mit mondani, valóban nem a leggyorsabb megoldás.

A másodikat viszont simán ki lehet kerülni: temp táblát kell használni.

Egy átlagos cursor úgy néz ki, hogy lenyom egy lekérdezést, majd az eredményben szépen sétálgat előre. Közben fogja az adatot, miközben lehet, hogy csak egy sima update-et kellene elvégezni minden soron valami komplexebb feltételrendszer mentén.

Ha úgy kezdjük, hogy a lekérdezést egy temp táblába irányítjuk, majd ezen iterálunk végig, máris kiküszöböltük a folyamatos lockolást. Aztán az update már csak egy-egy rekordot fog meg, amit amúgy is megtenne, de máris kikerültünk egy csapdát.

Szóval használjunk cursort, ha nagyon akarunk, vagy ha nincs már lehetőségünk, csak ügyesen tegyük.