<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Using a trigger to perform mass-update-safe, specific-field calculations</title><link>https://www.dotnetzone.gr:443/cs/blogs/sfilip/pages/using-a-trigger-to-perform-mass-update-safe-specific-field-calculations.aspx</link><description>I ran into this scenario a couple of days ago. Nothing special or complex, but I'd just like to share it with you. The scenario You’ve got a table which contains some information and you want to perform calculations based on this information and store</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Using a trigger to perform mass-update-safe, specific-field calculations</title><link>https://www.dotnetzone.gr:443/cs/blogs/sfilip/pages/using-a-trigger-to-perform-mass-update-safe-specific-field-calculations.aspx#5388</link><pubDate>Tue, 13 Sep 2005 06:25:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5388</guid><dc:creator>rousso</dc:creator><description>Κλασικό.&lt;br&gt;&lt;br&gt;Αν και νομίζω ότι θα έτερχε πιο γρήγορα αν αντί για INNER JOIN στο third approach χρησιμοποιούσε RIGHT JOIN&lt;br&gt;Δηλαδή: UPDATE ... SET ... FROM Products RIGHT JOIN Inserted ON ...&lt;br&gt;&lt;br&gt;Δεν νομίζω να το πιάνει ο optimizer αυτό...&lt;br&gt;&lt;br&gt;Γενικά τα INNER JOINs έχουν να κάνουν περισσότερη δουλειά από τα LEFT/RIGHT JOINs οπότε λογικά είναι πιό αργά. &lt;br&gt;&lt;br&gt;Σκέψου ότι το INNER JOIN πρέπει να σκανάρει και τα δύο tables για τιμές που είναι ίσες, ενώ το RIGHT JOIN κοιτάει κατευθείαν μόνο τις τιμές του Inserted που είναι λιγότερες και ακριβώς ο αριθμός των records που πρέπει να συνδεθούν.&lt;br&gt;&lt;br&gt;Θέλει βέβαια λίγο μεγαλύτερη ανάλυση για να το καλύψεις όλο το θέμα αλλά το άρθρο δίνει την κεντρική ιδέα. Χρειάζεται αντίστοιχο trigger και για το INSTEAD OF INSERT κλπ... &lt;br&gt;&lt;br&gt;Αν θυμάσαι που σας έλεγα για ένα projectάκι που έφτιαχνα με multilingual SQL Server databases... Εκεί το χρησιμοποιούσα κατα κόρον αυτό το σκεπτικό.&lt;br&gt;&lt;br&gt;rousso</description></item><item><title>Απ: Using a trigger to perform mass-update-safe, specific-field calculations</title><link>https://www.dotnetzone.gr:443/cs/blogs/sfilip/pages/using-a-trigger-to-perform-mass-update-safe-specific-field-calculations.aspx#5389</link><pubDate>Tue, 13 Sep 2005 06:31:38 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5389</guid><dc:creator>cap</dc:creator><description>Ναι, δεν διαφωνώ σε αυτό. Το κύριο μέλημα ήταν βέβαια να αποφύγω το βάρος της εκτέλεσης του UDF για όλα τα records, οπότε δεν έδωσα τόσο μεγάλη σημασία στον τύπο του join. Παρ'όλα αυτά, ναι, νομίζω οτι έχεις δίκιο.&lt;br&gt;&lt;br&gt;Τωρα για το instead of insert δεν κατάλαβα γιατί χρειάζεται, θελεις να το συνεχίσεις λίγο;</description></item><item><title>Απ: Using a trigger to perform mass-update-safe, specific-field calculations</title><link>https://www.dotnetzone.gr:443/cs/blogs/sfilip/pages/using-a-trigger-to-perform-mass-update-safe-specific-field-calculations.aspx#5411</link><pubDate>Tue, 13 Sep 2005 17:40:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5411</guid><dc:creator>rousso</dc:creator><description>όπως θες να ενημερώνεις τα πεδία που έχουν το calculation χωρίς να είναι calculated fileds όποτε κάνεις update... υποθέτω ότι προφανώς θέλεις να αποθηκεύεις τις αρχικές τιμές ότνα κάνεις insert...&lt;br&gt;&lt;br&gt;Αντίστοιχα αν τα πεδία ήταν σε άλλο πίνακα θα χρειαζόσουν και ένα trigger για το DELETE...&lt;br&gt;&lt;br&gt;Έτσι δεν είναι;&lt;br&gt;</description></item><item><title>Απ: Using a trigger to perform mass-update-safe, specific-field calculations</title><link>https://www.dotnetzone.gr:443/cs/blogs/sfilip/pages/using-a-trigger-to-perform-mass-update-safe-specific-field-calculations.aspx#5412</link><pubDate>Tue, 13 Sep 2005 17:46:26 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5412</guid><dc:creator>cap</dc:creator><description>Φυσικα. Ο ιδιος trigger όμως μπορεί να χρησιμεύσει και για το insert, και μάλιστα όχι INSTEAD OF, αλλά AFTER. Ο &amp;quot;inserted&amp;quot; virtual table έχει περιεχόμενα και στο insert και μπορει να δημιουργηθεί ένας trigger FOR UPDATE, INSERT που θα εξυπηρετεί και τα δυο operations χωρίς αλλαγή στον κώδικα.</description></item><item><title>Απ: Using a trigger to perform mass-update-safe, specific-field calculations</title><link>https://www.dotnetzone.gr:443/cs/blogs/sfilip/pages/using-a-trigger-to-perform-mass-update-safe-specific-field-calculations.aspx#5427</link><pubDate>Wed, 14 Sep 2005 01:10:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5427</guid><dc:creator>rousso</dc:creator><description>Ναι περίπου...&lt;br&gt;&lt;br&gt;Για το UPDATE θέλεις INSTEAD OF trigger για να μην κάνεις update δυο φορές τα ίδια records...&lt;br&gt;&lt;br&gt;Για το INSERT για να μπορεί να παίξει το JOIN (ό ίδιος κώδικας) πρέπει να το κάνεις μετά το INSERT, διαφορετικά πρέπει να γράψεις αλλιώς το trigger και να το βάλεις INSTED OF INSERT...&lt;br&gt;&lt;br&gt;anyway... &lt;br&gt;Λεπτομέρειες...&lt;br&gt;Το concept το έχεις καλύψει.&lt;br&gt;&lt;br&gt;rousso</description></item><item><title>Απ: Using a trigger to perform mass-update-safe, specific-field calculations</title><link>https://www.dotnetzone.gr:443/cs/blogs/sfilip/pages/using-a-trigger-to-perform-mass-update-safe-specific-field-calculations.aspx#5431</link><pubDate>Wed, 14 Sep 2005 06:42:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:5431</guid><dc:creator>cap</dc:creator><description>Ναι, οκ. &lt;br&gt;&lt;br&gt;Στο update κάνω ουσιαστικά δύο updates, ένα το κανονικό και ένα το update του υπολογιζόμενου πεδίου. &lt;br&gt;&lt;br&gt;Τωρα όμως το instead of update δεν ξέρω πόσο καλά θα έπαιζε με το if update. Anyway, όπως λες και εσύ, λεπτομέρειες σε σχέση με το συγκεκριμένο concept, πάμε σε πολύ fine-grained performance tuning εκεί, το οποίο έχει να κάνει με την ταχύτητα των updates. Αυτό που κοιτούσαμε αρχικά ήταν να βελτιώσουμε την ταχύτητα των SELECTs, πράγμα που επετεύχθη.&lt;br&gt;&lt;br&gt;Στο insert παίζει και όπως έχει, κάνοντας update εκ των υστέρων βέβαια.</description></item><item><title>Απ: Using a trigger to perform mass-update-safe, specific-field calculations</title><link>https://www.dotnetzone.gr:443/cs/blogs/sfilip/pages/using-a-trigger-to-perform-mass-update-safe-specific-field-calculations.aspx#6203</link><pubDate>Mon, 17 Oct 2005 21:28:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:6203</guid><dc:creator>KelMan</dc:creator><description>Περί INNER vs LEFT/RIGHT Joins...&lt;br&gt;&lt;br&gt;Το πρόβλημα που περιγράφεις φίλε rousso δεν έχει έχει να κάνει με το είδος του join και αυτό γιατί το optimization engine επιλέγει βάσει των statistics τον κατάλληλο join αλγόριθμο (loop, hash ή merge) ώστε να υπάρχει το καλύτερο δυνατό performance. Ουσιαστικά, αυτό το scanάρισμα που λες συμβαίνει μόνο κατά το loop join. Στο hash ή στο merge δεν συμβαίνει και για την ακρίβεια, αυτό είναι κλασικό σενάριο hash join...&lt;br&gt;&lt;br&gt;Γενικά, είναι καλύτερα να χρησιμοποιούμε τα Left/Right joins, όταν θέλουμε υποχρεωτικά να συμπεριλαμβάνονται οι εγγραφές του left ή του right και null για ό,τι δεν υπάρχει από την άλλη μεριά αλλά αυτό δεν συναπάγεται απαραίτητα ότι το Left/Right join είναι γρηγορότερο από το inner.</description></item><item><title>Using a trigger to perform mass-update-safe, specific-field calculatio</title><link>https://www.dotnetzone.gr:443/cs/blogs/sfilip/pages/using-a-trigger-to-perform-mass-update-safe-specific-field-calculations.aspx#22902</link><pubDate>Sun, 31 Dec 2006 00:14:10 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:22902</guid><dc:creator>DotNetKicks.com</dc:creator><description>You've been kicked (a good thing) - Trackback from DotNetKicks.com</description></item></channel></rss>