Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 10821|Απάντηση: 0

[Πηγή] sql ΕΠΙΛΟΓΗ

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 8/1/2016 5:58:31 μ.μ. | | |

Έβλεπα τους ανώτερους προγραμματιστές μου να χρησιμοποιούν το WITH (NOLOCK) όταν έκαναν ερωτήματα στον SQL Server και αναρωτιόμουν γιατί χρησιμοποιούν. Τώρα το εξερεύνησα και διαπίστωσα ότι είναι χρήσιμο να βελτιωθεί η απόδοση κατά την εκτέλεση του ερωτήματος . Ωστόσο, υπάρχει ένα μειονέκτημα στη χρήση του. Το μειονέκτημα είναι ότι κάποιος μπορεί να μην είναι σίγουρος ότι λαμβάνει τα δεδομένα που ενημερώνονται αυτήν τη στιγμή στον Πίνακα, δηλαδή, Χωρίς προστασία κλειδώματος, δεν μπορείτε να είστε σίγουροι ότι τα δεδομένα δεν είναι Αλλάζει κατά τη διάρκεια του χρόνου εκτέλεσης του ερωτήματος. Παρέπεμψα αυτόν τον σύνδεσμο και τον βρήκα αρκετά χρήσιμο.

Για να βελτιωθεί η απόδοση του ερωτήματος SQL, σε γενικές γραμμές, το πρώτο μέλημα είναι η δημιουργία ενός ευρετηρίου. Στην πραγματικότητα, εκτός από τη δημιουργία ευρετηρίων, όταν τοποθετούμε εντολές SQL, η προσθήκη μιας ενότητας ΜΕ (NOLOCK) στη σύνταξη μπορεί να βελτιώσει το φαινόμενο του κλειδώματος των συνόλων δεδομένων σε ένα περιβάλλον με μεγάλο αριθμό διαδικτυακών ερωτημάτων, βελτιώνοντας έτσι την απόδοση του ερωτήματος.

Ωστόσο, ένα πράγμα που πρέπει να σημειωθεί είναι ότι το SQL SELECT με (NOLOCK) μπορεί να προκαλέσει βρώμικη ανάγνωση.

Για παράδειγμα:




Επειδή ο SQL Server εκτελεί τον αντίστοιχο έλεγχο συνέπειας κλειδώματος. Για να βελτιώσετε τη συνολική απόδοση του ερωτήματος της βάσης δεδομένων, προσθέστε το WITH (NOLOCK) στο τέλος του ονόματος του πίνακα στη σύνταξη SELECT, αν και το (NOLOCK) είναι επίσης αποδεκτό, αλλά η Microsoft εξακολουθεί να συνιστά την προσθήκη WITH.

Εκτός από το απλό SELECT, μπορείτε επίσης να χρησιμοποιήσετε τη σύνταξη SELECT με το JOIN. Αλλά οι εντολές DELETE, INSERT, UPDATE και άλλες εντολές που απαιτούν συναλλαγές δεν είναι καλές...

Ορισμένα αρχεία λένε ότι η αποτελεσματικότητα των ερωτημάτων SQL μπορεί να αυξηθεί κατά 33% με το WITH (NOLOCK).
Η προσθήκη WITH (NOLOCK) λέει στον SQL Server ότι η εντολή SELECT δεν χρειάζεται να λαμβάνει υπόψη την κατάσταση κλειδώματος συναλλαγών του τρέχοντος πίνακα, επομένως η απόδοση θα βελτιωθεί σημαντικά και το φαινόμενο κλειδώματος του συστήματος βάσης δεδομένων θα μειωθεί σημαντικά (συμπεριλαμβανομένου του dead lock).

Ένα πράγμα που πρέπει να σημειωθεί είναι ότι επειδή το WITH (NOLOCK) δεν λαμβάνει υπόψη το κλείδωμα συναλλαγών του τρέχοντος πίνακα, οπότε όταν υπάρχουν κάποια δεδομένα σε πολλαπλές φάσεις μιας συναλλαγής (π.χ. μια συναλλαγή σε πολλούς πίνακες - > όπως ένα σύστημα ανάληψης), το WITH (NOLOCK) θα αγνοήσει τα δεδομένα που επεξεργάζεται αυτήν τη στιγμή τη διαδικασία συναλλαγής...

Για να το θέσω ωμά, δηλαδή όταν χρησιμοποιείτε το NoLock, επιτρέπει την ανάγνωση δεδομένων που έχουν τροποποιηθεί αλλά η συναλλαγή δεν έχει ακόμη ολοκληρωθεί. Επομένως, εάν πρέπει να λάβετε υπόψη την ακεραιότητα των δεδομένων συναλλαγών σε πραγματικό χρόνο, θα πρέπει να σκεφτείτε προσεκτικά τη χρήση του WITH (NOLOCK).

Εάν δεν χρειάζεται να λάβετε υπόψη τις συναλλαγές, το WITH (NOLOCK) μπορεί να είναι μια χρήσιμη αναφορά.

Σημείωση 1: ΜΕ ( < table_hint > )
Καθορίζει τη σάρωση πίνακα, ένα ή περισσότερα ευρετήρια που χρησιμοποιούνται από τη βελτιστοποίηση ερωτήματος,
Ή από το εργαλείο βελτιστοποίησης ερωτήματος για να αξιοποιήσετε αυτόν τον πίνακα δεδομένων και να χρησιμοποιήσετε τη λειτουργία κλειδώματος για αυτήν την πρόταση.

Σημείωση 2: Το WITH (NOLOCK) ισοδυναμεί με το READ UNCOMMITTED

Τέλος, ας μιλήσουμε για μερικές μικρές διαφορές μεταξύ nolock και with(nolock):
1: Συνώνυμα στο SQL05, υποστηρίζεται μόνο με (nolock).
2: με (nolock) γράφεται πολύ εύκολα και στη συνέχεια καθορίστε το ευρετήριο.
Όταν κάνετε ερωτήματα σε δηλώσεις σε διακομιστές, δεν μπορείτε να χρησιμοποιήσετε με (nolock), μόνο nolock
Κατά την υποβολή ερωτημάτων στον ίδιο διακομιστή, μπορούν να χρησιμοποιηθούν και τα δύο με (nolock) και nolock
Όπως αυτό που
Κώδικας SQL
επιλέξτε * από [IP].a.dbo.table1 με (nolock) Αυτό θα σας ζητήσει το σφάλμα επιλέξτε * από a.dbo.table1 με (nolock) Αυτό θα λειτουργήσει




Προηγούμενος:Το C# κρύβει το μεσαίο ψηφίο του αριθμού ταυτότητας
Επόμενος:Το jQuery φορτώνει το js με ajax
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com