|
Väide 1: Protsendimärgi protsendi eesliide põhjustab SQL-päringute peatamise indeksi ja selle asemel täieliku tabeli skaneerimise. See väide on populaarne Järeldus on vale Tegelikult pole see väide väga täpne. Wildcard % prefiks muudab SQL-i otsingu indeksite leidmiseks väga tõhusaks, kuid enamasti läheb see ikkagi indeksisse (täisteksti indeksit pole vaja, lihtsalt ehitatakse tavaline indeks). LOO [DBO]-S MITTEKLASTERDATUD INDEKS [Ix_index NIMI]. [wkf_ Laua nimi]
( [db_title] ASC
) Täideviige sel ajal VALI top 10 [db_id],[db_Summary],[db_AddDate],[db_title] FROM [raamatukogu nimi]. [dbo]. [wkf_database] kus [db_title]näiteks '%dba%' järjekord 1 desc järgi
Päringuplaan on selgelt kuvatud
Enne kui võrdlus indekseeritakse:
Erandina võivad keerulised päringud Päringu optimeerija võib indeksist loobuda ja eelistada täistabeli skaneerimist. See ei kehti ainult LIKE '%keyword%' puhul, vaid on seotud ka päringute keerukusega
Väide 2: Protsendiprotsendilised jokker-prefiksid muudavad SQL-päringud indekseerivaks, mitte indeksita
See väide on väga ühepoolne ning 99% indeksist vähendab IO-d ja parandab efektiivsust võrreldes indekseerimiseta olemisega, kuid võtmetähtsusega sobitustegevus pärast indeksi leidmist on samuti osaliselt jõudlust nõudev. Nagu ülaltoodud kahel joonisel näidatud, kui märksõnad on kergesti sobitatavad, leiab kogu tabeli skaneerimine andmed kiiresti üles ning indeksi skaneerimine ei säästa piisavalt aega, et kompenseerida võtmete sobitamise tegevusele kulunud aega (enamikul veebipäringutel seda probleemi ei ole). Ravi: 1. Kui see sind ei huvita, pole lisajõudluse tarbimine väga suur. Erinevatel märksõnadel on erinev tarbimine, kuid mõnel märksõnal on see probleem ja neid võib ignoreerida 2. Parem viis on ehitada ülekirjutuse indeks (tuntud ka kui INCLUDE indeks), kui tingimused seda võimaldavad. Eeldus: a. Salvestusruum on piisav, b ei mõjuta DML operatsioone oluliselt ja c ei sisalda üle kirjutatud indeksis suuri välju LOO [DBO]-S MITTEKLASTERDATUD INDEKS [Ix_index NIMI]. [wkf_ Laua nimi]
( [db_title] ASC
) HÕLMA ( [db_id],[db_Summary],[db_AddDate]) Praegu on täitmispäringu plaan järgmine, mis on palju värskendavam
Eelnev on see, mida ma praegu SQLSERVERI töötlemiseks mõtlen, VALI * TABELINIME järgi nagu '%Keyword %'
|