Ohne die Where-Klausel wird jeder Datensatz in die Datenbank zurückgeschrieben, mit dem where nur, wenn auch ein Treffer stattgefunden hat.
Ist das in diesem Fall tatsächlich so?
Habe mir mal eine gut gefüllte Testdatenbank gezogen und einige Update-Durchläufe vorgenommen.
Den Test habe ich zum Vergleich mehrmals wiederholt, die Zeiten bewegen sich in vergleichbaren Rahmen (+/- 1 sec, im Durchschnitt 8,1 sec).
mit where-Klausel:
ohne:
Er matched ohne where-Klausel mehr Datensätze, ändert (changed) aber in beiden Fällen lediglich 190.603 Zeilen. Die Zeiten sind im Durchschnitt auch identisch - ohne where sogar einen Ticken schneller, aber das schiebe ich auf Messtoleranzen.
Zum Vergleich nochmal ein wiederholtes Update-Query auf eine bereits geänderte Tabelle:
Changed: 0
Sieht mir also schon danach aus, als ob der SQL-Server das intern bereits beim Replace() optimiert und filtert. Leider finde ich dazu keine Referenz und wüsste lediglich gern, ob es nun wirklich nötig (bei Verwendung der Replace-Funktion!) ist eine separate where-Klausel zu nutzen, die in anderen Szenarien natürlich sinnvoll ist, das steht außer Frage.
Die Tabelle hat jetzt zwar nur eine knappe halbe Million Datensätze, aber ich denke schon, dass wir uns hier in vergleichbar größeren Testregionen bewegen.
Gruß, René
PS: Wirklich interessant zu welchen Diskussionen ein einfacher Domainwechsel so führen kann.
Edit: Testergebisse als txt angefügt.