<?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>Πρώτα Βήματα - Βάσεις δεδομένων</title><link>https://www.dotnetzone.gr:443/cs/forums/73/ShowForum.aspx</link><description>Για όσους κάνουν τα πρώτα τους βήματα στην Microsoft Access ή τον SQL Server, ή γενικότερα στη θεωρία βάσεων δεδομένων.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59171.aspx</link><pubDate>Thu, 17 Jun 2010 00:13:54 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59171</guid><dc:creator>nikolaosk</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59171.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59171</wfw:commentRss><description>&lt;P&gt;Μάλιστα. Οπότε δεν ισχύει ότι η μία λύση είναι καλύτερη όσο αφορά το performance. Είναι στην λογική , it depends.&lt;/P&gt;
&lt;P&gt;τα Links , τους έριξα μια ματιά και είναι κατατοπιστικά.&lt;/P&gt;
&lt;P&gt;βρήκα και αυτό εδώ&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sqlug.be/blogs/wesleyb/archive/2008/04/14/table-variable-vs-parallelism.aspx"&gt;http://sqlug.be/blogs/wesleyb/archive/2008/04/14/table-variable-vs-parallelism.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;κάπου εκεί μέσα λέει "was the fact that queries do not go parallel when table variables are involved.&amp;nbsp;"&lt;/P&gt;
&lt;P&gt;αυτό όντως είναι θέμα, να μην μπορεί να χρησιμοποιεί&amp;nbsp;ένα multi-CPU μηχάνημα.&lt;/P&gt;
&lt;P&gt;και μετά είδα και αυτό το &lt;A href="http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/30/sql-server-table-variable-vs-local-temporary-table.aspx"&gt;Post&lt;/A&gt;&amp;nbsp;που επιβεβαίωσε την υποψία μου ότι δεν είναι τα data pages&amp;nbsp;των tables variables αποθηκευμένα μόνο στην μνήμη αλλά χρησιμοποιούνε και την temp db.&lt;/P&gt;
&lt;P&gt;Οπότε κάποιος εκτυπώνοντας όλα αυτά για το αρχείο του καταλαβαίνει τι συμβαίνει με τις 2 αυτές επιλογές.&lt;/P&gt;</description></item><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59168.aspx</link><pubDate>Wed, 16 Jun 2010 23:42:13 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59168</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59168.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59168</wfw:commentRss><description>&lt;P&gt;A, εδώ (&lt;A href="http://support.microsoft.com/kb/305977/el"&gt;http://support.microsoft.com/kb/305977/el&lt;/A&gt;) τα λέει πιο συγκεκριμένα:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q5: Do I have to use table variables instead of temporary tables?&lt;BR&gt;&lt;BR&gt;A5:&lt;/STRONG&gt; The answer depends on these three factors: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The number of rows that are inserted to the table. 
&lt;LI&gt;The number of recompilations the query is saved from. 
&lt;LI&gt;The type of queries and their dependency on indexes and statistics for performance.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In some situations, breaking a stored procedure with temporary tables into smaller stored procedures so that recompilation takes place on smaller units is helpful. &lt;BR&gt;&lt;BR&gt;In general, you use table variables whenever possible except when there is a significant volume of data and there is repeated use of the table. In that case, you can create indexes on the temporary table to increase query performance. However, each scenario may be different. Microsoft recommends that you test if table variables are more helpful than temporary tables for a particular query or stored procedure.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Αλλά και πάλι είναι για SQL Server 2000 οπότε δεν θα μου έκανε έκπληξη αν κάτι από αυτά δεν ισχύει στις επόμενες εκδόσεις. Βασικά, μόνο με testing μπορείς να είσαι σίγουρος.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59167.aspx</link><pubDate>Wed, 16 Jun 2010 23:37:04 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59167</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59167.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59167</wfw:commentRss><description>&lt;P&gt;Δεν έχει νόημα να τα ξαναγράφω, δες εδώ &lt;A href="http://databases.aspfaq.com/database/should-i-use-a-temp-table-or-a-table-variable.html"&gt;http://databases.aspfaq.com/database/should-i-use-a-temp-table-or-a-table-variable.html&lt;/A&gt;&amp;nbsp;για ένα συγκριτικό. Από εκεί και πέρα,&amp;nbsp;καμιά από τις δύο λύσεις (table variables / temp tables)&amp;nbsp;δεν είναι πάντοτε κι εγγυημένα η καλύτερη. Όπως λέει και στην κατάληξη του άρθρου, χρειάζεται δοκιμή με "reasonable load testing".&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59165.aspx</link><pubDate>Wed, 16 Jun 2010 22:03:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59165</guid><dc:creator>nikolaosk</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59165.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59165</wfw:commentRss><description>&lt;br&gt;Μάνο,&lt;br&gt;&lt;br&gt;&lt;br&gt;
με ενδιαφέρει και εμένα το θέμα Performance temp tables με table
variables. καταλαβαίνω ότι τα temp tables δημιουργούνται στο temp db ενώ τα table variables στην μνήμη.&lt;br&gt;&lt;br&gt;αλλά δεν κασάρονται oι temp tables στην μνήμη όπως και οποιαδήποτε άλλα data ( ανάλογα βέβαια με την ποσότητα μνήμης ) για γρήγορη πρόσβαση?&lt;br&gt;&lt;br&gt;τα table variables στην περίπτωση της "λίγης-στρεσαρισμένης&amp;nbsp; μνήμης" δεν κάνουν χρήση της Temp db?&lt;br&gt;&lt;br&gt;μπορείς να βάλεις indexes σε table variables? αν όχι, δεν προκύπτει ότι θα έχουμε table scan-bad performance? στα temp tables μπορείς να έχεις μια σειρά από Indexes-improve performance if correctly selected.&lt;br&gt;&lt;br&gt;Μπορείς να έχεις statistics στα table variables?&lt;br&gt;&lt;br&gt;πως προκύπτει ότι τα table variables είναι πιο γρήγορα από τα temp tables?&lt;br&gt;&lt;br&gt;αυτό θα ήτανε ένα καλό post για το sqlschool.gr&lt;br&gt;</description></item><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59156.aspx</link><pubDate>Wed, 16 Jun 2010 16:33:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59156</guid><dc:creator>Bill </dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59156.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59156</wfw:commentRss><description>&amp;nbsp;&amp;nbsp;&amp;nbsp; Πάνω στα views δεν θέλω να δουλέψω γιατί οι stored procedures μεταβάλουν τα δεδομένα που φέρνουν τα views αλλά πέρα απο αυτό τα views δεν είναι ένα ή 2 αλλά πάρα πολλά πάνω απο 20. Την λύση του table variable την έχω χρησιμοποιήσει στο παρελθόν για άλλο λόγω και δεν μπορώ να πω πως με βελτίωσε τους χρόνους αρκετά αισθητά απλά με έβγαλε απο μια δύσκολη περίπτωση αλλά είναι όντως καλή τακτική. Το έχω ήδη όπως αναφέρω κ πιο πάνω με πίνακες και πάει πολύ γρήγορα και παίζει ήδη καλά. Το Θέμα μου ήταν και είναι να δω τους πιθανους κινδύνους του όλου εγχειρήματος . Η αλήθεια είναι ότι το κόστος Create / Drop table κοστίζει και αφού υπάρχει και η δυνατότητα temp tables την οποία δεν την έχω και πολύ συμπάθεια (δική μου αποψη μην την δίνετε σημασία) ίσως να το δοκίμαζα να παίξω με temp tables. Αλλά σε καμία περίπτωση δεν θα έμπαινα στο κόπο να πειράξω / παίξω με τα πολλά views τουλάχιστον αυτή τη στιγμή (μια τέτοια λύση είναι πολύ πιο επιρεπής σε λάθη παρά το οτι είναι ίσως η ορθότερη).&lt;br&gt;</description></item><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59155.aspx</link><pubDate>Wed, 16 Jun 2010 15:50:39 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59155</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59155.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59155</wfw:commentRss><description>&lt;P&gt;Οι temp πίνακες λύνουν όλα τα προβλήματα που ανέφερε ο Παναγιώτης στο προηγούμενο του post ωστόσο δεν λύνουν το πρόβλημα του performance. Επίσης, πέρα από τα temp tables&amp;nbsp;υπάρχουν και τα &lt;A href="http://msdn.microsoft.com/en-us/library/ms175010.aspx"&gt;table variables&lt;/A&gt; μια λύση που αξίζει να τη διερευνήσεις. &lt;/P&gt;
&lt;P&gt;Το ερώτημα λοιπόν είναι γιατί δεν μπορείς να δουλέψεις με τις stored procedures απευθείας πάνω στα views και χρειάζεται να ρίξεις τα αποτελέσματα πρώτα σε temp πίνακες; Προσωπικά θα εξαντλούσα πρώτα αυτό το ενδεχόμενο, να δουλέψω πάνω στα views, κατόπιν θα εξέταζα τη λύση των table variables και τέλος τα temp tables. Είναι δύσκολο να είσαι σίγουρος εκ των προτέρων για το ποιά λύση είναι καλύτερη ως προς το performance αλλά τυπικά οι χρόνοι για τις τρεις υλοποιήσεις είναι views &amp;lt; table variables &amp;lt; temp tables.&amp;nbsp;Θα πρέπει να δοκιμάσεις την κάθε μία γιατί εξαρτάται από το σενάριο (μεγάλο/μικρό set από data, κλπ).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59150.aspx</link><pubDate>Wed, 16 Jun 2010 06:55:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59150</guid><dc:creator>Bill </dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59150.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59150</wfw:commentRss><description>Βασικά αυτό που θέλω να κάνω είναι να κρατώ σε 2 πίνακες κάποια αποτελέσματα απο views (τα views είναι πολλά κ ανάλογα με την περίπτωση) ώστε πάνω σ' αυτά να κάνω κάποιους ελέγχους με stored procedures και να εκτυπώνω τα δεδομένα. Το όλο story είναι οτι δεν θέλω να αλλάξω τα αποτελέσματα όπως έρχονται απο τα views απλά μονο για την συγκεκριμένη περίπτωση και εκτός αυτού με αυτό το τρόπο θα έχω και καλύτερους χρόνους δεν θα είναι αργό. Αρχηκά το έκανα με πίνακες όπου μετά την εκτύπωση τους κάνω drop απο την βάση. Αλλά σκέφτηκα μήπως προκύψουν προβλήματα και για αυτό ρώτησα .Θεωρώ ότι με temp tables είναι καλή περίπτωση.&lt;br&gt;</description></item><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59134.aspx</link><pubDate>Tue, 15 Jun 2010 18:41:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59134</guid><dc:creator>manosB</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59134.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59134</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Εφόσον υπάρχει πραγματική ανάγκη να χρησιμοποιήσεις temp πίνακες, θα πρέπει να χρησιμοποιήσεις τις δυνατότητες που σου δίνει η βάση σου. Για παράδειγμα, ο SQL Server σου επιτρέπει να δημιουργήσεις &lt;a href="http://msdn.microsoft.com/en-us/library/ms177399.aspx"&gt;temporary tables&lt;/a&gt; απλά προσθέτωντας το # στο όνομα του πίνακα. Οι πίνακες αυτοί δημιουργούνται στην tempDB οπότε δεν προκαλούν fragmentation στις βάσεις σου, δημιουργούνται ανά χρήστη οπότε δεν υπάρχει θέμα χρήσης από άλλο batch και τέλος διαγράφονται αυτόματα όταν δεν χρειάζονται πλέον.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I second that. Έχω χρησιμοποιήσει πολύ αυτό το feature στον SQL Server όταν χρειάστηκαν πολύπλοκες store procedures. Δεν είχα κανένα πρόβλημα και το συνιστώ ανεπιφύλακτα.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Φυσικά πρέπει να δούμε τι ζητάς μήπως μπορείς να αποφύγεις και αυτό με τη χρήση ενός πιο σύνθετου query. Πάντως σαν λύση δουλεύει μια χαρά.&lt;/div&gt;</description></item><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59132.aspx</link><pubDate>Tue, 15 Jun 2010 17:59:37 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59132</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59132.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59132</wfw:commentRss><description>&lt;P&gt;Το πραγματικό κόστος της δημιουργίας temporary πινάκων είναι ότι προκαλούν fragmentation στη βάση. Επίσης, ένας πιθανός κίνδυνος είναι ότι ..... πάντα κάποιος άλλος θα βρεθεί να ξανατρέξει την ίδια διαδικασία που δεν έπρεπε να τρέξει και θα βρεθούν δύο να προσπαθούν να πειράξουν τον ίδιο πίνακα! Τέλος, υπάρχει ο πιο πιθανός κίνδυνος να ξεμείνουν οι πίνακες επειδή για κάποιο λόγο διακόπηκε το batch, είτε λόγω χαμένης σύνδεσης, κρεμάσματος της εφαρμογής, πιθανό deadlock, timeout κλπ. Αν μάλιστα σκεφτείς ότι οι temp πίνακες χρησιμοποιούνται κυρίως για batch processing μεγάλης διάρκειας, η πιθανότητα να μείνει κάτι είναι δεν είναι αμελητέα.&lt;/P&gt;
&lt;P&gt;Εφόσον υπάρχει πραγματική ανάγκη να χρησιμοποιήσεις temp πίνακες, θα πρέπει να χρησιμοποιήσεις τις δυνατότητες που σου δίνει η βάση σου. Για παράδειγμα, ο SQL Server σου επιτρέπει να δημιουργήσεις &lt;A href="http://msdn.microsoft.com/en-us/library/ms177399.aspx"&gt;temporary tables&lt;/A&gt; απλά προσθέτωντας το # στο όνομα του πίνακα. Οι πίνακες αυτοί δημιουργούνται στην tempDB οπότε δεν προκαλούν fragmentation στις βάσεις σου, δημιουργούνται ανά χρήστη οπότε δεν υπάρχει θέμα χρήσης από άλλο batch και τέλος διαγράφονται αυτόματα όταν δεν χρειάζονται πλέον.&lt;/P&gt;
&lt;P&gt;Όπως όμως σου είπε και ο Μάνος, πρέπει να μας πεις ΓΙΑΤΙ του θέλεις. Ίσως να μην κάνουν για την περίπτωση σου, ίσως να υπάρχουν άλλες, πιο εύκολες λύσεις, ίσως πάλι να είναι ακριβώς αυτό που ζητάς αλλά ... τί ζητάς?&lt;/P&gt;</description></item><item><title>Απ: Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59131.aspx</link><pubDate>Tue, 15 Jun 2010 17:19:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59131</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59131.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59131</wfw:commentRss><description>&lt;P&gt;Πέρα από το ότι το create/drop κοστίζει στη βάση ως διαδικασία πολύ περισσότερο από insert/truncate (οπότε σε συνήθες φόρτου καταλαβαίνεις...) δεν μπορώ να σκεφώ κάποιον άλλο κίνδυνο. Εκτός αν το πας κάπου που δεν φαντάζομαι αυτή τη στιγμή. Εγκυκλοπαιδικές ερωτήσεις, εγκυκλοπαιδικές απαντήσεις...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Διαγραφή πίνακα και επαναδημιουργία</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59130.aspx</link><pubDate>Tue, 15 Jun 2010 17:06:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59130</guid><dc:creator>Bill </dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59130.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=59130</wfw:commentRss><description>&amp;nbsp; Θέλω να ρωτησω τι κινδύνους διατρέχει (τελείως εγκυκλοπαιδικά ρωτάω) το να έχουμε μια εφαρμογή όπου για μια ενέργεια να δημιουργεί κάποιους πίνακες να γεμίζουν κάποια dataset και μετά να τους σβήνει μόλις τελείωνει!!!! Χωρις transaction και ας θεωρήσουμε ότι δεν έχει νόημα το να μπλέξουμε με transactions δεν θα εκτελείτε ταυτόχρονα κάτι απο άλλον!!! &lt;br&gt;</description></item></channel></rss>