Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 12044|Odgovoriti: 0

[Komunikacija] Problem izkoriščenosti indeksa, ko sqlserver obravnava kot '%keyword%'

[Kopiraj povezavo]
Objavljeno na 26. 11. 2014 15:52:19 | | | |

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 %'






Prejšnji:Replikacija transakcij SQL Server doda nove tabele brez ponovne inicializacije
Naslednji:Praktična SQL izjava: ocenjevanje datuma
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com