|
Izjava 1: Predpona wildcarda z odstotkom odstotnega predznaka bo povzročila, da SQL poizvedbe ustavijo indeks in namesto tega uporabijo popolno pregledovanje tabel. Ta izjava je priljubljena Zaključek je napačen Pravzaprav ta trditev ni zelo natančna. Predpona wildcard % bo naredila SQL iskanje indeksov izjemno učinkovito, vendar bo v večini primerov še vedno vodila v indeks (ni potreben celoten besedilni indeks, samo zgradite običajen indeks) USTVARITE NEGRUČEN INDEKS [Ix_index IME] NA [dbo]. [wkf_ Ime mize]
( [db_title] ASC
) Izvedite v tem trenutku IZBERITE top 10 [db_id], [db_Summary], [db_AddDate],[db_title] IZ [ime knjižnice]. [dbo]. [wkf_database] kjer [db_title]kot '%dba%' vrstijo po 1 desc
Načrt povpraševanja je jasno prikazan
Preden je primerjava indeksirana:
Izjema so kompleksne poizvedbe Optimizator poizvedb lahko opusti indeks v korist popolnega pregledovanja tabel. To ne velja le za LIKE '%keyword%', ampak tudi za kompleksnost poizvedb
Izjava 2: Odstotki % wildcard predpon bodo naredili SQL poizvedbe indeksirane namesto brez indeksa
Ta izjava je zelo enostranska, 99 % indeksa bo zmanjšalo IO in izboljšalo učinkovitost v primerjavi z neindeksiranjem, vendar je tudi usklajevanje ključnih elementov po odkritju indeksa delno porabno za zmogljivost. Kot je prikazano na zgornji dve sliki, če so ključne besede enostavno ujemane, celoten pregled tabele hitro najde podatke, indeks pa ne prihrani dovolj časa, da bi nadomestil čas, ki ga porabi akcija ujemanja ključev (večina spletnih poizvedb tega problema nima). Zdravljenje: 1. Če vam ni mar, dodatna poraba zmogljivosti ni velika. Različne ključne besede imajo različno uporabo, a nekatere ključne besede imajo ta problem in jih je mogoče prezreti 2. Boljši način je izdelava indeksa preglasitve (znanega tudi kot indeks INCLUDE), če pogoji to dopuščajo. Predpostavka: a. Prostor za shranjevanje je zadosten, b ne vpliva bistveno na DML operacije in c nima velikih polj v prepisanem indeksu USTVARITE NEGRUČEN INDEKS [Ix_index IME] NA [dbo]. [wkf_ Ime mize]
( [db_title] ASC
) INCLUDE ( [db_id],[db_Summary],[db_AddDate]) Trenutno je načrt izvajanja poizvedb naslednji, kar je veliko bolj osvežujoče
Zgornje je to, kar mi zdaj pride na misel za obdelavo SQLSERVER SELECT * FROM TABLENAME, kot je '%Keyword %'
|