Σύγκριση ταξινομήσεις SQL σε συρραφές των Windows

Σύνοψη

Στον Microsoft SQL Server 2000 και τον Microsoft SQL Server 2005, "Συρραφή" Καθορίζει τον τρόπο συμβολοσειρές σε σύγκριση και ταξινομούνται και ποιο χαρακτήρα σύνολο χρησιμοποιείται για μη Unicode δεδομένα. SQL Server 2000 υποστηρίζει δύο τύπους ταξινομήσεις:
  • Οι συρραφές SQL
  • Συρραφές των Windows
Για μια περιγραφή κάθε τύπο συρραφής και καλή επισκόπηση του πώς μπορείτε να αποφασίσετε ποια συρραφής για να χρησιμοποιήσετε, ανατρέξτε στο θέμα "Ταξινομήσεις επιλέγοντας" SQL Server 2000 Books Online ή ανατρέξτε στο θέμα "Τύποι συρραφή" στο SQL Server 2005 Books Online.

Αυτό το άρθρο ασχολείται με πρόσθετα ζητήματα που ενδέχεται να επηρεάσουν την απόφασή σας σχετικά με το εάν θέλετε να επιλέξετε μια συρραφή Windows ή μια συρραφή SQL κατά την εγκατάσταση του SQL Server 2000 ή SQL Server 2005.

Περισσότερες πληροφορίες

Σημασιολογία συρραφής

Για μια συρραφή Windows, υλοποιείται η σύγκριση των δεδομένων μη Unicode, χρησιμοποιώντας τον ίδιο αλγόριθμο ως δεδομένα Unicode. Unicode και ταξινόμηση μη Unicode είναι συμβατές με τους κανόνες της σύγκρισης συμβολοσειράς σε μια συγκεκριμένη έκδοση των Windows. Αυτό παρέχει συνοχή μεταξύ τους τύπους δεδομένων στον SQL Server. Βοηθά επίσης τους προγραμματιστές που χρησιμοποιούν τη λειτουργία Win32 API CompareString για να ταξινομήσετε συμβολοσειρές στην εφαρμογή τους, χρησιμοποιώντας τους ίδιους κανόνες που χρησιμοποιεί το SQL Server.

Σε μια συρραφή SQL, SQL Server ορίζει σύγκρισης διαφορετική σημασιολογία για μη Unicode δεδομένα. SQL Server βασίζει αυτές οι σημασιολογία σύγκρισης σε SQL "Ταξινόμηση". Για μια αντιστοίχιση σειρές ταξινόμησης να συρραφές SQL, ανατρέξτε στο θέμα "Όνομα Συρραφή SQL" στα ηλεκτρονικά βιβλία του SQL Server.

Κανόνες του μια συρραφή SQL για την ταξινόμηση δεδομένων μη Unicode δεν είναι συμβατές με κάθε ρουτίνα ταξινόμησης που παρέχεται από το λειτουργικό σύστημα των Microsoft Windows. Ωστόσο, η ταξινόμηση των δεδομένων Unicode είναι συμβατό με μια συγκεκριμένη έκδοση των Windows ταξινόμηση κανόνες. Επειδή οι κανόνες σύγκρισης για μη Unicode και δεδομένα Unicode είναι διαφορετικά, όταν χρησιμοποιείτε μια συρραφή SQL που μπορεί να δείτε διαφορετικά αποτελέσματα για συγκρίσεις τους ίδιους χαρακτήρες, ανάλογα με τον τύπο της βάσης δεδομένων. Για παράδειγμα, εάν χρησιμοποιείτε την SQL συρραφή "SQL_Latin1_General_CP1_CI_AS", η μη Unicode συμβολοσειρά 'α-γ' είναι μικρότερο από τη συμβολοσειρά 'ab' επειδή το ενωτικό ("-") ταξινομείται ως ξεχωριστό χαρακτήρα που βρίσκεται πριν από το "b". Ωστόσο, εάν μετατρέψετε αυτές τις συμβολοσειρές Unicode και εκτέλεση ίδια σύγκρισης, το Unicode συμβολοσειρά Γεια-c» θεωρείται ότι είναι μεγαλύτερη από N'ab' επειδή η ταξινόμηση Unicode κανόνες χρησιμοποιούν μια "Ταξινόμηση word" που παραβλέπει το ενωτικό.

Συμβολοσειρά σύγκριση επιδόσεων

Κανόνες ταξινόμησης Unicode είναι πολύ πιο πολύπλοκα από τους κανόνες για μια σειρά ταξινόμησης Unicode SQL. Όταν SQL Server, συγκρίνει δεδομένα Unicode, το χαρακτήρες αντιστοιχίζονται βάρος που δυναμικά τροποποιηθεί με βάση τις τοπικές ρυθμίσεις της συρραφής. Τα δεδομένα είναι επίσης τροποποιηθεί συγκριτικά ρυθμίσεις στυλ, όπως το πλάτος, έμφασης ή ευαισθησία κάνα. Οι ρουτίνες ταξινόμησης Unicode υποστηρίζουν περισσότερο νοήμονες συμπεριφορές ταξινόμησης, όπως ταξινόμηση από το word.

Επιπλέον, επειδή οι ρουτίνες πρέπει να χειριστείτε δεδομένα Unicode, είναι αρκετά ευέλικτες ώστε να χειριστεί την ταξινόμηση και τη σύγκριση των αρκετά χιλιάδες διακριτές χαρακτήρες, αντί για τη μέγιστη 255 χαρακτήρες που μπορεί να χειριστεί περισσότερες σειρές ταξινόμησης SQL Server. Για τους λόγους αυτούς, η εργασία σύγκρισης συμβολοσειράς raw που χρησιμοποιεί το Unicode ταξινόμηση κανόνες είναι συνήθως πιο ακριβοί από άποψη χρόνου και κύκλους Επεξεργαστή από μια παρόμοια σύγκρισης συμβολοσειρών που χρησιμοποιεί μια σειρά ταξινόμησης Unicode SQL.

Τι σημαίνει αυτό για πιθανούς συνδυασμούς τύπων δεδομένων και των τύπων συρραφής στον SQL Server:
  • Εάν είστε την αποθήκευση και χειρισμό των δεδομένων σας με τη χρήση τύπων δεδομένων μη Unicode (char, varchar, κείμενο) και χρησιμοποιείτε μια συρραφή SQL, θα πραγματοποιηθούν οι συγκρίσεις συμβολοσειρών με μια σειρά ταξινόμησης Unicode SQL.
  • Εάν είστε την αποθήκευση και χειρισμό των δεδομένων σας με τη χρήση τύπων δεδομένων μη Unicode (char, varchar, κείμενο) και χρησιμοποιείτε μια συρραφή Windows, θα εκτελεστεί συγκρίσεις συμβολοσειρών με τους κανόνες ταξινόμησης Unicode. Αυτό μπορεί να προκαλέσει ορισμένες λειτουργίες που είναι ασυνήθιστα εξαρτάται από συμβολοσειρά ταξινόμηση επιδόσεων να διαρκέσει περισσότερο και να χρησιμοποιήσετε περισσότερες CPU από μια παρόμοια λειτουργία που εκτελείται με μια συρραφή SQL.
  • Εάν χρησιμοποιείτε τους τύπους δεδομένων Unicode (nchar, nvarchar, ntext), δεν υπάρχει διαφορά στην συμπεριφορά ταξινόμησης SQL και τις συρραφές των Windows. Και τα δύο θα χρησιμοποιήσει Unicode ταξινόμηση κανόνες.
Γενικά, ο βαθμός απόδοσης διαφορά μεταξύ των Windows και τις ταξινομήσεις SQL δεν θα είναι σημαντικές. Η διαφορά εμφανίζεται μόνο αν ένα φόρτο εργασίας είναι δεσμευμένο CPU, αντί να περιορισμός I/O ή ταχύτητα του δικτύου, και τα περισσότερα από αυτό το φορτίο CPU προκαλείται από την επιβάρυνση της χειραγώγησης της συμβολοσειράς ή συγκρίσεις εκτελούνται στον SQL Server. Ένα παράδειγμα μιας εφαρμογής, όπου μπορεί να προφέρεται η διαφορά επιδόσεων είναι ένα σύστημα όπου μια εφαρμογή μεταβιβάζει μια τιμή συμβολοσειράς μεγάλου μήκους σε ένα διακομιστή SQL που είναι αποθηκευμένη διαδικασία. Η αποθηκευμένη διαδικασία κατόπιν αναλύει τη συμβολοσειρά μέσω εκτεταμένη χρήση συναρτήσεων Transact-SQL συμβολοσειρά χειρισμό όπως CHARINDEX ή PATINDEX. Εάν το φόρτο εργασίας είναι αρκετά μονοδιάστατη και το κυριαρχούν από εκτελέσεις της αυτή η συμβολοσειρά ανάλυση αποθηκευμένη διαδικασία, τη διαφορά απόδοσης μεταξύ ενός Συρραφή SQL και μια συρραφή Windows μπορεί να είναι αισθητές. Ωστόσο, η σχεδίαση του περισσότερες εφαρμογές δεν οδηγεί σε μια κατάσταση όπου η διαφορά απόδοσης είναι σημαντική.

Συστάσεις

  1. Παρέχονται ταξινομήσεις SQL για συμβατότητα με παλαιότερες εκδόσεις του SQL Server. Συρραφές των Windows παρέχουν σταθερή συμβολοσειρά συγκρίσεις για δύο Unicode και για μη Unicode κειμένου στον SQL Server που είναι επίσης συνεπής με συγκρίσεις συμβολοσειρών στο λειτουργικό σύστημα των Windows. Για όλους αυτούς τους λόγους, συρραφές των Windows προτιμούνται εκτός εάν υπάρχουν ζητήματα συμβατότητας με παλαιότερες εκδόσεις ή ζητήματα ειδικές επιδόσεις που απαιτούν μια συρραφή SQL.
  2. Εάν εξετάζετε μια συρραφή SQL με βάση μόνο τα χαρακτηριστικά απόδοσης μιας συρραφής SQL, θα πρέπει να γνωρίζετε ότι οι επιδόσεις των περισσότερων εφαρμογών δεν επωφελούνται σημαντικά από μια αλλαγή στην κατάταξη. Βεβαιωθείτε ότι έχετε απομονώσει ερωτημάτων που εμφανίζουν όφελος από μια συρραφή SQL. Μόλις προσδιορίσετε τα ερωτήματα που επηρεάζονται, λάβετε υπόψη σας τις ακόλουθες εναλλακτικές λύσεις για μια αλλαγή στην κατάταξη. Και οι δύο αυτές τις εναλλακτικές λύσεις ενδέχεται να παρέχουν όφελος επιδόσεων που είναι μεγαλύτερος από ό, τι θα βλέπετε αν αλλάξετε τη συρραφή παρουσία για μια συρραφή SQL:
    1. Εάν η επιβάρυνση για τις συρραφές των Windows είναι να αποτυπωθούν σε ρουτίνες Transact-SQL που εκτελούν χειρισμό ρητή συμβολοσειρά ή την ανάλυση και εάν χρησιμοποιείτε τύποι δεδομένων μη Unicode, μπορείτε να καθορίσετε μια συρραφή SQL ή ένα δυαδικό συρραφή Windows για τη λειτουργία που εκτελείται συχνά και που είναι πιο ακριβά. Ας υποθέσουμε ότι χρησιμοποιείτε τη συνάρτηση PATINDEX για να προσδιορίσετε αν μια στήλη κειμένου σε έναν πίνακα περιέχει το χαρακτήρα "x". Εάν επιβάλλετε μια συρραφή SQL για αυτήν τη λειτουργία συγκεκριμένου σύγκρισης και συνεχίζετε να χρησιμοποιείτε μια συρραφή Windows για το υπόλοιπο της βάσης δεδομένων και της εφαρμογής, που δεν χρειάζεται να αλλάξετε τη συρραφή για ολόκληρο το σύστημα:
      SELECT PATINDEX ('%x%', MemoFld COLLATE SQL_Latin1_General_Cp1_CI_AS) FROM ...
    2. Εάν η επιβάρυνση για τις συρραφές των Windows έχει εντοπιστεί η μονότονη περισσότερα ερωτήματα που δεν χρησιμοποιούν λειτουργίες διαχείρισης πολύπλοκων συμβολοσειρά, βελτιωμένο ευρετήριο ή το ερώτημα σχέδια μπορεί να παρέχει βελτιώσεις που dwarf αυτά θα δείτε αλλάζοντας σε μια συρραφή SQL. Ένα ερώτημα που μπορούν να καλυφθούν από ιδιαίτερα επιλεκτική επιδιώκει στην κατάλληλη ευρετήρια δεν θα είναι ευαίσθητα σε μικρές αλλαγές στο κόστος σύγκρισης συμβολοσειράς. Αντίθετα, μια μικρή ποσότητα επιβάρυνση ανά σύγκρισης συμβολοσειράς να προσθέσετε γρήγορα σε ένα ερώτημα που πρέπει να εκτελέσετε μια σάρωση πίνακα και να συγκρίνετε μια συγκεκριμένη τιμή σε κάθε εκατομμύρια γραμμές. Εάν μπορείτε να αποτρέψετε μεγάλο πίνακα ή ευρετήριο σαρώνει από το σχέδιο ερωτήματος, αλλάζοντας το ευρετήριο ή το ίδιο το ερώτημα, το ερώτημα θα εκτελέσει πολύ ταχύτερα από ότι εάν αλλάζετε σε μια συρραφή SQL.
Σημείωση Υπάρχει και ένας τρίτος τύπος συρραφής που είναι μια παραλλαγή του μια συρραφή SQL. Η τρίτη συρραφής είναι γνωστή ως "Συρραφή συμβατότητας" ή ένα "obsolescent συρραφή". Μια συρραφή συμβατότητας είναι ένα σύνολο ταξινόμηση και σύγκριση κανόνες που δεν έχουν ένα όνομα προκαθορισμένες συρραφής στον SQL Server 2000. Για παράδειγμα, εάν ορίσετε SQL Server 7.0 με ένα ασυνεπής διάκριση πεζών-κεφαλαίων ρύθμιση για Unicode και για μη Unicode δεδομένα, θα έχετε μια συρραφή συμβατότητας όταν κάνετε αναβάθμιση σε αυτήν την παρουσία του SQL Server 7.0 σε SQL Server 2000. Στη συζήτηση σε αυτό το άρθρο, οι πληροφορίες σχετικά με συρραφές SQL ισχύει επίσης για συμβατότητα ταξινομήσεις.

Για περισσότερες πληροφορίες σχετικά με τη συμβατότητα ταξινομήσεις, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:

270042 INF: ταξινομήσεις συμβατότητας περιγραφή του SQL Server

Ιδιότητες

Αναγνωριστικό άρθρου: 322112 - Τελευταία αναθεώρηση: 17 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια