sqlschool.gr logo

articles

Articles of SQLschool.gr Team

The TRUNCATE TABLE statement

Fivi Panopoulou - Sotiris Karras
Sunday 15 November 2015

Σε αυτό το post θα μιλήσουμε για το TRUNCATE TABLE statement, τις χρήσεις του και τις διαφορές του με το DELETE statement.
Χρησιμοποιώντας το TRUNCATE TABLE σε έναν πίνακα της βάσης μας, το αποτέλεσμα θα είναι να διαγραφούν όλες οι γραμμές του πίνακα αυτού. Για παράδειγμα, με το παρακάτω statement θα διαγραφούν όλα τα δεδομένα του πίνακα TransactionHistory.
 
TRUNCATE TABLE Production.TransactionHistory;
GO

Σύγκριση με το DELETE Statement:

Το ίδιο αποτέλεσμα θα πετυχαίναμε και με την εντολή:

DELETE FROM Production.TransactionHistory;
GO
 
Παρόλα αυτά υπάρχουν κάποιες διαφορές ανάμεσα στις δύο παραπάνω περιπτώσεις.
Αρχικά, δοκιμάζοντας τα παραπάνω statements παρατηρούμε ότι το πρώτο εκτελείται ακαριαία, ενώ το δεύτερο χρειάζεται 7 δευτερόλεπτα να εκτελεστεί. Αυτό συμβαίνει γιατί στην δεύτερη περίπτωση η διαγραφή γίνεται για κάθε μία γραμμή του πίνακα και ο SQL Server βάζει ένα entry στο transaction log για κάθε γραμμή που διαγράφεται. Αντίθετα, στην περίπτωση του truncate ο SQL Server θα κάνει deallocate τις σελίδες που αντιστοιχούν στα δεδομένα του πίνακα και στο log θα γραφτεί ένα deallocation ανά σελίδα. Έτσι το truncate γίνεται πολύ πιο γρήγορα και καταναλώνει λιγότερους πόρους σε σχέση με το αντίστοιχο delete.

Μια ακόμα διαφορά μεταξύ των δύο παραπάνω περιπτώσεων, είναι ότι στην περίπτωση του delete, είναι πιθανό να παραμείνουν allocated κενές σελίδες που αντιστοιχούν στον πίνακα ή τους indexes.

Επίσης, το delete statement  χρησιμοποιεί ένα lock ανά γραμμή του πίνακα, ενώ το truncate κάνει lock τον πίνακα και τις σελίδες του.

Παρατηρήσεις:

• Δεν μπορούμε να κάνουμε truncate πίνακα ο οποίος συμμετέχει σε foreign key constraints
• Το truncate δεν πυροδοτεί τους triggers που πυροδοτούνται από delete.
• Σε πίνακες που περιλαμβάνουν στήλη με IDENTITY, όταν τον κάνουμε truncate αυτό θα γίνει RESEED στην αρχική τιμή που έχει καθοριστεί στον ορισμό του πίνακα.
• Το truncate μπορεί να γίνει rollback, εφόσον φυσικά περιέχεται μέσα σε ένα transaction


Fivi Panopoulou

Fivi Panopoulou

Το 2007 ξεκίνησα τις σπουδές μου στη σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών στο Εθνικό Μετσόβιο Πολυτεχνείο.Κατά την διάρκεια των σπουδών μου εκεί αγάπησα τον προγραμματισμό και τα συστήματα πληροφορικής, καθώς επίσης απέκτησα το ιδιαίτερο ενδιαφέρον μου για τις βάσεις δεδομένων. Κατά την διάρκεια της διπλωματικής μου ασχολήθηκα με ζητήματα ανωνυμοποίησης δεδομένων και την ανάπτυξη σχετικού εργαλείου. Τα τελευταία χρόνια των σπουδών μου, μου δόθηκε η ευκαιρία να ασχοληθώ περισσότερο και να διευρύνω τους ορίζοντές μου ως Microsoft Student Partner και μέσω της κοινότητας Student Guru. Στα πλαίσια των κοινοτήτων αυτών, ξεκίνησα να ασχολούμαι με παρουσιάσεις αλλά και να γνωρίζω τον SQL Server. Από την πρώτη στιγμή που ασχολήθηκα μαζί του, συνειδητοποίησα πόσο ήθελα να εμβαθύνω τις γνώσεις μου σχετικά με αυτόν και τα συστήματα διαχείρισης βάσεων δεδομένων γενικότερα, πράγμα που προσπαθώ να κάνω έκτοτε. Πριν χρόνια είχα την τύχη να συμμετέχω στο πρόγραμμα mentoring, μέσω του οποίου γνώρισα τον κ. Χατζηπαυλή. Από τότε συμμετέχω στην ομάδα του SQLschool.gr.


Sotiris Karras

Sotiris Karras

Είμαι απόφοιτος της σχολής Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Εθνικού Μετσόβιου Πολυτεχνείου και στα ενδιαφέροντά μου συμπεριλαμβάνεται o τομέας του Knowledge and Data Engineering. Πιο συγκεκριμένα, έχω ασχοληθεί ακαδημαϊκά και ερευνητικά με τον τομέα του data privacy και data anonymity, ενώ πάθος μου είναι ό,τι έχει να κάνει με relational databases και data management. Στο παρελθόν, έχω συνεργαστεί με την Microsoft Hellas ως Microsoft Student Partner για ακαδημαϊκές δραστηριότητες και ήμουν μέρος του MVP mentoring προγράμματός της, στο οποίο είχα την τύχη να γνωρίσω τον κ. Χατζηπαυλή.

Episode

First look: SQL Database in Microsoft Fabric

image

More Episodes...

Tip

What's New in SQL Server 2022 - Episodes

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn


sqlschool.gr © 2010-2024 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.