|
Δήλωση 1: Το πρόθεμα μπαλαντέρ % του συμβόλου ποσοστού θα προκαλέσει τη διακοπή του ευρετηρίου από τα ερωτήματα SQL και τη χρήση πλήρους σάρωσης πίνακα. Αυτή η δήλωση είναι δημοφιλής Το συμπέρασμα είναι λάθος Στην πραγματικότητα, αυτή η δήλωση δεν είναι πολύ ακριβής Το πρόθεμα % μπαλαντέρ θα κάνει την αναζήτηση SQL για ευρετήρια εξαιρετικά αποτελεσματική, αλλά στις περισσότερες περιπτώσεις θα εξακολουθεί να πηγαίνει στο ευρετήριο (δεν απαιτείται ευρετήριο πλήρους κειμένου, απλώς δημιουργήστε ένα κανονικό ευρετήριο) ΔΗΜΙΟΥΡΓΊΑ ΜΗ ΟΜΑΔΟΠΟΙΗΜΈΝΟΥ ΕΥΡΕΤΗΡΊΟΥ [όνομα Ix_index] ΣΤΟ [dbo]. [wkf_ Όνομα πίνακα]
( [db_title] ΑΣΚ
) Εκτέλεση αυτή τη στιγμή ΕΠΙΛΕΞΤΕ τα κορυφαία 10 [db_id],[db_Summary],[db_AddDate],[db_title] ΑΠΟ [όνομα βιβλιοθήκης]. [dbo]. [wkf_database] όπου το [db_title]όπως το '%dba%' ταξινομεί κατά 1 desc
Το σχέδιο ερωτήματος εμφανίζεται καθαρά
Πριν από την ευρετηρίαση της σύγκρισης:
Κατ' εξαίρεση, σύνθετα ερωτήματα Το εργαλείο βελτιστοποίησης ερωτημάτων μπορεί να εγκαταλείψει το ευρετήριο υπέρ της πλήρους σάρωσης πίνακα. Αυτό δεν συμβαίνει μόνο με το LIKE '%keyword%', αλλά σχετίζεται και με την πολυπλοκότητα του ερωτήματος
Δήλωση 2: Το ποσοστό % των προθεμάτων μπαλαντέρ θα κάνει τα ερωτήματα SQL ευρετήριο αντί για κανένα ευρετήριο
Αυτή η δήλωση είναι πολύ μονόπλευρη και το 99% του δείκτη θα μειώσει το IO και θα βελτιώσει την αποτελεσματικότητα σε σύγκριση με τη μη ευρετηρίαση, αλλά η βασική ενέργεια αντιστοίχισης μετά την εύρεση του δείκτη είναι επίσης εν μέρει αποδοτική. Όπως φαίνεται στα δύο παραπάνω σχήματα, εάν οι λέξεις-κλειδιά αντιστοιχίζονται εύκολα, η σάρωση πλήρους πίνακα εντοπίζει γρήγορα τα δεδομένα και η σάρωση ευρετηρίου δεν εξοικονομεί αρκετό χρόνο για να αναπληρώσει τον χρόνο που καταναλώνεται από την ενέργεια αντιστοίχισης κλειδιών (τα περισσότερα ηλεκτρονικά ερωτήματα δεν έχουν αυτό το πρόβλημα). Θεραπεία: 1. Αν δεν σας ενδιαφέρει, η επιπλέον κατανάλωση απόδοσης δεν είναι πολύ μεγάλη. Και διαφορετικές λέξεις-κλειδιά έχουν διαφορετική κατανάλωση, αλλά ορισμένες λέξεις-κλειδιά έχουν αυτό το πρόβλημα και μπορούν να αγνοηθούν 2. Ένας καλύτερος τρόπος είναι να δημιουργήσετε έναν δείκτη παράκαμψης (γνωστό και ως δείκτης INCLUDE) εάν το επιτρέπουν οι συνθήκες. Προϋπόθεση: α. Ο αποθηκευτικός χώρος είναι επαρκής, το b δεν επηρεάζει σημαντικά τις λειτουργίες DML και το c δεν έχει μεγάλα πεδία στο ευρετήριο που έχει αντικατασταθεί ΔΗΜΙΟΥΡΓΊΑ ΜΗ ΟΜΑΔΟΠΟΙΗΜΈΝΟΥ ΕΥΡΕΤΗΡΊΟΥ [όνομα Ix_index] ΣΤΟ [dbo]. [wkf_ Όνομα πίνακα]
( [db_title] ΑΣΚ
) INCLUDE ( [db_id],[db_Summary],[db_AddDate]) Αυτή τη στιγμή, το σχέδιο ερωτήματος εκτέλεσης έχει ως εξής, το οποίο είναι πολύ πιο αναζωογονητικό
Τα παραπάνω είναι αυτό που μπορώ να σκεφτώ τώρα για την επεξεργασία του SQLSERVER SELECT * FROM TABLENAME LIKE '%Keyword %'
|