Βασικά, ο cursor είναι πιο γρήγορος από το Update στην περίπτωση του running sum. Ο λόγος είναι ότι ο cursor διαβάζεις τα δεδομένα μόνο μία φορά, έχοντας πολυπλοκότητα n, όπου n ο αριθμός των εγγραφών. Το select διαβάζει τα δεδομένα μία φορά για κάθε εγγραφή, έχοντας έτσι πολυπλοκότητα n². Ο cursor έχει κάποιο overhead σε σχέση με το update, οπότε για μικρό αριθμό εγγραφών το update είναι γρηγορότερο. Για μεγαλύτερο αριθμό εγγραφών όμως, ο cursor είναι γρηγορότερος.
Ευτυχώς υπάρχει και ακόμα πιο γρήγορη και μαζεμένη λύση, αν χρησιμοποιήσεις ένα SQL CLR procedure ή SQL CLR function. Σε αυτή την περίπτωση έχεις βελτίωση σε σχέση με τον cursor κατά 25% περίπου. Κοίτα το post του Adam Machanic, "Running Sums Yet Again: SQL CLR Saves the Day". Υπάρχει πάντως και η λύση να κάνεις το άθροισμα στον client. Κάποια εργαλεία reporting υποστηρίζουν τη δημιουργία running totals, ενώ ο υπολογισμός του running total στον client π.χ. για ένα datatable απαιτεί ένα μόνο iteration των δεδομένων. Το μόνο που χρειάζεται είναι το datatable να περιέχει τα επιμέρους αθροίσματα. Συνήθως όμως αυτή την πληροφορία τη στέλνει κανείς μαζί με το running sum, οπότε δεν έχει ουσιαστική διαφορά. Ίσα-ίσα, επειδή αποφεύγεις το βήμα υπολογισμού και τους cursors στον server, το συνολικό query μπορεί να πάρει λιγότερο χρόνο αν φτιάξεις το running total στον client.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos