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

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

[Επικοινωνία] Πρόβλημα χρήσης ευρετηρίου όταν ο sqlserver χειρίζεται όπως '%keyword%'

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 26/11/2014 3:52:19 μ.μ. | | | |

Δήλωση 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 %'






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

Mail To:help@itsvse.com