<?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>SQL Server (και άλλες databases)</title><link>https://www.dotnetzone.gr:443/cs/forums/28/ShowForum.aspx</link><description>Θέματα που αφορούν τον SQL Server (7.0, 2000, 2005) αλλά και Oracle, Access, DB2, MySQL, κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Ποιο γρήγορo Query με χρήση Virtual Tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9396.aspx</link><pubDate>Wed, 08 Feb 2006 20:31:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9396</guid><dc:creator>imanos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9396.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=9396</wfw:commentRss><description>Και ο Μάνος και εσύ Παναγιώτη έχετε δίκιο τελικά.&lt;br&gt;Λάθος μου που δέν κοίταξα το EXECUTION PLAN</description></item><item><title>Απ: Ποιο γρήγορo Query με χρήση Virtual Tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9330.aspx</link><pubDate>Tue, 07 Feb 2006 06:21:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9330</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9330.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=9330</wfw:commentRss><description>Δεν μπορώ να πω ότι κατάλαβα την τεχνική. Φαίνεται σαν μια προσπάθεια να αναγκάσεις τον optimizer να κάνει το query με συγκεκριμένο τρόπο. Αυτό όμως δεν πιάνει καθώς ο optimizer του SQL Server δημιουργεί το ίδιο execution plan για όλες τις περιπτώσεις, όπως ανέφερε ο Kelman. Η μορφή του execution plan εξαρτάται από τα στατιστικά των πινάκων και των indexes, όχι από τη μορφή του sql. &lt;br&gt;&lt;br&gt;Ο optimizer μπορεί να επιλέξει οποιοδήποτε τρόπο για να εκτελέσει το query με το γρηγορότερο τρόπο, ακόμα και να δημιουργήσει temp tables. Ο πιο αποτελεσματικός τρόπος για να βελτιώσεις την απόδοση του query είναι να δημιουργήσεις καλύτερα indexes και να βελτιώσεις το σχήμα της βάσης.</description></item><item><title>Απ: Ποιο γρήγορo Query με χρήση Virtual Tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9321.aspx</link><pubDate>Tue, 07 Feb 2006 03:49:53 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9321</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9321.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=9321</wfw:commentRss><description>Είναι καλό project... Αλλά δεν μπορώ να υποσχεθώ για κάτι άμμεσο...&lt;br&gt;Μπαίνει στο ToDo list.</description></item><item><title>Απ: Ποιο γρήγορo Query με χρήση Virtual Tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9319.aspx</link><pubDate>Tue, 07 Feb 2006 03:40:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9319</guid><dc:creator>axaros</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9319.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=9319</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/dotnetzone-black/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;KelMan wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt;Γενικά, τα περισσότερα queries που γράφουμε&amp;nbsp;υλοποιούνται με πολλούς εναλλακτικούς τρόπους και γι αυτό είναι καλό να γνωρίζει κανείς να ερμηνεύει το execution plan &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Μάνο δεν ρίχνεις κάτι σχετικό με την ερμηνεία των plans όταν προλάβεις;&lt;/P&gt;</description></item><item><title>Απ: Ποιο γρήγορo Query με χρήση Virtual Tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9028.aspx</link><pubDate>Mon, 30 Jan 2006 23:19:51 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9028</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9028.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=9028</wfw:commentRss><description>&lt;P&gt;Από Temp Tables σίγουρα, από IN clause πάλι παίζεται... &lt;/P&gt;
&lt;P&gt;Γενικά, τα περισσότερα queries που γράφουμε&amp;nbsp;υλοποιούνται με πολλούς εναλλακτικούς τρόπους και γι αυτό είναι καλό να γνωρίζει κανείς να ερμηνεύει το execution plan έτσι ώστε να δοκιμάζει μερικούς από αυτούς τους τρόπους και να βρίσκει τον καλύτερο. Επίσης, σημαντικό είναι να θυμόμαστε ότι μια τεχνική που παίζει καλά σε έναν πίνακα, μπορεί να μην είναι η καλύτερη για κάποιον άλλον καθότι αυτό που παίζει ρόλο είναι, όπως προανέφερα,&amp;nbsp;η φύση των δεδομένων.&lt;/P&gt;</description></item><item><title>Απ: Ποιο γρήγορo Query με χρήση Virtual Tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9024.aspx</link><pubDate>Mon, 30 Jan 2006 22:17:44 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9024</guid><dc:creator>imanos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9024.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=9024</wfw:commentRss><description>Δέν θα διαφωνίσω μαζί σου.&lt;br&gt;&lt;br&gt;Απλά ανέφερα την τεχνική των Virtual tables που ουσιαστικά είναι ένα select query αναφερόμενο  ώς πίνακας στο where clause του select statement .&lt;br&gt;&lt;br&gt;Απλά νομίζω χρησιμοποιώντας τα Virtual tables έχουμε είνα πιο αποδοτικό από την χρησιμοποίηση Temp Tables ή ένα ΙΝ (SELECT ...) μέσα στό select statement.&lt;br&gt;&lt;br&gt;Ξέρω οτι το παράδειγμα που έδειξα είναι απλοϊκό αλλά εάν περάσεις σε πιο σύνθετα queries και σχέσεις πινάκων αυτός είναι ένας βολικός τρόπος.</description></item><item><title>Απ: Ποιο γρήγορo Query με χρήση Virtual Tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9023.aspx</link><pubDate>Mon, 30 Jan 2006 21:47:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9023</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9023.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=9023</wfw:commentRss><description>&lt;P&gt;Και για ποιον λόγο να μην κάνεις join τους πίνακες που είναι πιο απλό; &lt;/P&gt;
&lt;P&gt;Aν μεταφέρουμε τα queries στην Northwind, για παράδειγμα&amp;nbsp;το πρώτο και το δεύτερο γίνονται:&lt;/P&gt;
&lt;P&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;SELECT&lt;/span&gt; od.* &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;FROM&lt;/span&gt; [&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;order&lt;/span&gt; details] od ,(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;SELECT&lt;/span&gt; OrderID &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;FROM&lt;/span&gt; Orders) &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;AS&lt;/span&gt; O &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;WHERE&lt;/span&gt; od.OrderID = o.OrderID &lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;SELECT&lt;/span&gt; od.* &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;FROM&lt;/span&gt; [&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;order&lt;/span&gt; details] od &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;INNER&lt;/span&gt; &lt;span style="color: Silver;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;JOIN&lt;/span&gt; Orders o &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;ON&lt;/span&gt; od.OrderID = o.OrderID &lt;/span&gt;&lt;/P&gt;
&lt;P&gt;παράγουν το ίδιο execution plan όπως το &lt;/P&gt;
&lt;P&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;SELECT&lt;/span&gt; od.* &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;FROM&lt;/span&gt; [&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;order&lt;/span&gt; details] od &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;INNER&lt;/span&gt; &lt;span style="color: Silver;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;JOIN&lt;/span&gt; Orders o &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;ON&lt;/span&gt; od.OrderID = o.OrderID &lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Το query engine του SQL Server είναι απίθανο! Μία από τις φάσεις που περνάει το statement όταν πρόκειται να το εκτελέσει είναι το optimization. Ενδεχομένως σε κάποια άλλη database να παίζει ρόλο αν θα γράψεις το query με τον έναν ή τον άλλον τρόπο, αλλά στον SQL Server όλοι οι τρόποι οδηγούν στα joins &lt;img src="/cs/emoticons/emotion-1.gif" alt="Smile [:)]" /&gt;&lt;/P&gt;
&lt;P&gt;Άρα λοιπόν θα πρέπει να λύνεις κάποιο συγκεκριμένο πρόβλημα για να μην επιλέξεις joins, πχ να γράφεις cross db platform&amp;nbsp;statements. Εσωτερικά τώρα, τα joins υλοποιούνται με διάφορους τρόπους από το query engine, ανάλογα με τα περιεχόμενα των πινάκων που γίνονται join. Ένας από τους τρόπους αυτούς είναι με χρήση hash tables - πολύ χοντρικά κάτι σαν virtual tables - αλλά ο τρόπος που θα επιλέξει τελικά να κάνει join εξαρτάται από τα ίδια τα περιεχόμενα τών πινάκων (τι indexes έχουν, αν είναι ταξινομημένα ή όχι, τι κατανομή έχουν οι τιμές, κλπ).&lt;/P&gt;
&lt;P&gt;Παρεπιπτόντως, το query engine συνεχώς βελτιώνεται όχι μόνο από έκδοση σε έκδοση αλλά από SP σε SP. Η ομάδα του SQL Server σε συνεργασία με μεγάλους οργανισμούς που χρησιμοποιούν SQL Server, λαμβάνει δείγματα από πραγματικά δεδομένα και τα queries που χρησιμοποιούν και βελτιστοποιεί συνεχώς τον τρόπο που δουλεύει το engine!&lt;/P&gt;</description></item><item><title>Απ: Ποιο γρήγορo Query με χρήση Virtual Tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9022.aspx</link><pubDate>Mon, 30 Jan 2006 20:55:29 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9022</guid><dc:creator>Χρήστος Γεωργακόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9022.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=9022</wfw:commentRss><description>Μήπως να τα εξηγούσες λίγο περισσότερο;</description></item><item><title>Ποιο γρήγορo Query με χρήση Virtual Tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9018.aspx</link><pubDate>Mon, 30 Jan 2006 19:56:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9018</guid><dc:creator>imanos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9018.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=9018</wfw:commentRss><description>&lt;PRE&gt;&lt;FONT face="Courier New" size=2&gt;Παράδειγμα πρώτο (Χωρίς χρηση Virtual Table):
&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face="Courier New" size=2&gt; &lt;FONT color=#000080&gt;SELECT&lt;/FONT&gt; *&lt;FONT face="Courier New" size=2&gt; &lt;FONT color=#000080&gt;FROM&lt;/FONT&gt; myTableName_1&lt;FONT face="Courier New" size=2&gt; &lt;FONT color=#000080&gt;WHERE&lt;/FONT&gt; ID &lt;FONT color=#000080&gt;IN&lt;/FONT&gt; (SELECT ID &lt;FONT color=#000080&gt;FROM&lt;/FONT&gt; myTableName_2)
&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face="Courier New" size=2&gt;Παράδειγμα Δεύτερο (Με χρήση Virtual Table):
&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face="Courier New" size=2&gt; &lt;FONT color=#000080&gt;SELECT&lt;/FONT&gt; a.*&lt;FONT face="Courier New" size=2&gt; &lt;FONT color=#000080&gt;FROM&lt;/FONT&gt; myTableName_1 a,&lt;FONT face="Courier New" size=2&gt;(SELECT ID &lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#000080&gt;FROM&lt;/FONT&gt; myTableName_2) &lt;FONT color=#000080&gt;AS&lt;/FONT&gt; b &lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#000080&gt;WHERE&lt;/FONT&gt; a.ID = b.ID
&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face="Courier New" size=2&gt;Παράδειγμα τρίτο (Nesting Virtual Table):
&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face="Courier New" size=2&gt; &lt;FONT color=#000080&gt;SELECT&lt;/FONT&gt; a.* &lt;FONT face="Courier New" size=2&gt; &lt;FONT color=#000080&gt;FROM&lt;/FONT&gt; myTableName_1 a, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT face="Courier New" size=2&gt;(SELECT ID &lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#000080&gt;FROM&lt;/FONT&gt; myTableName_2 t,&lt;FONT face="Courier New" size=2&gt;(SELECT c.eID &lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#000080&gt;FROM&lt;/FONT&gt; myTableName_3) &lt;FONT color=#000080&gt;AS&lt;/FONT&gt; c
&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#000080&gt;WHERE&lt;/FONT&gt; t.ID = c.eID) &lt;FONT color=#000080&gt;AS&lt;/FONT&gt; b&lt;FONT face="Courier New" size=2&gt; &lt;FONT color=#000080&gt;WHERE&lt;/FONT&gt; a.ID = b.ID
&lt;/PRE&gt;&lt;/FONT&gt;

&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;</description></item></channel></rss>