Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 12044|Atsakyti: 0

[Komunikatas] Indekso naudojimo problema, kai sqlserver tvarko kaip '%keyword%'

[Kopijuoti nuorodą]
Paskelbta 2014-11-26 15:52:19 | | | |

1 teiginys: Procento ženklo % pakaitos priešdėlis privers SQL užklausas sustabdyti indeksą ir vietoj to naudoti visą lentelės nuskaitymą. Šis teiginys yra populiarus

Išvada klaidinga

Tiesą sakant, šis teiginys nėra labai tikslus Pakaitos simbolių % priešdėlis padarys SQL indeksų paiešką itin efektyvią, tačiau daugeliu atvejų ji vis tiek pateks į indeksą (nereikia viso teksto indekso, tiesiog sukurkite įprastą indeksą)

KURTI NESUGRUPUOTĄ INDEKSĄ [Ix_index PAVADINIMAS] [dbo]. [wkf_ lentelės pavadinimas]
(
[db_title]  ASC
)

Vykdyti šiuo metu

SELECT top 10 [db_id],[db_Summary],[db_AddDate],[db_title] FROM [bibliotekos pavadinimas]. [DBO]. [wkf_database] kur [db_title]like '%dba%' rikiuoti pagal 1 desc

Užklausos planas aiškiai rodomas

Prieš indeksuojant palyginimą:


Išimties tvarka sudėtingos užklausos Užklausų optimizavimo priemonė gali atsisakyti indekso ir nuskaityti visą lentelę. Taip yra ne tik su LIKE '%keyword%', bet ir su užklausos sudėtingumu




2 teiginys: procentų % pakaitos priešdėliai padarys SQL užklausas indeksu, o ne be indekso

Šis teiginys yra labai vienpusis, ir 99% indekso sumažins IO ir padidins efektyvumą, palyginti su neindeksavimu, tačiau pagrindinis atitikimo veiksmas nustačius indeksą taip pat iš dalies reikalauja našumo. Kaip parodyta dviejuose aukščiau pateiktuose paveikslėliuose, jei raktiniai žodžiai lengvai sutampa, visos lentelės nuskaitymas greitai randa duomenis, o indekso nuskaitymas nesutaupo pakankamai laiko, kad kompensuotų raktų atitikimo veiksmo sugaištą laiką (dauguma internetinių užklausų neturi šios problemos).
Gydymas:
1. Jei jums tai nerūpi, papildomos našumo sąnaudos nėra labai didelės. Skirtingų raktažodžių vartojimas skiriasi, tačiau kai kurie raktažodžiai turi šią problemą ir gali būti ignoruojami
2. Geresnis būdas yra sukurti nepaisymo indeksą (taip pat žinomą kaip INCLUDE indeksas), jei sąlygos tai leidžia. Prielaida: a. Saugyklos vietos pakanka, b neturi didelės įtakos DML operacijoms, o c neturi didelių laukų perrašytame indekse

KURTI NESUGRUPUOTĄ INDEKSĄ [Ix_index PAVADINIMAS] [dbo]. [wkf_ lentelės pavadinimas]
(
[db_title]  ASC
)
INCLUDE ( [db_id],[db_Summary],[db_AddDate])

Šiuo metu vykdymo užklausos planas yra toks, o tai yra daug gaivesnis


Aukščiau yra tai, ką aš galiu galvoti apie dabar SQLSERVER apdorojimo SELECT * FROM TABLENAME LIKE '%Keyword %'






Ankstesnis:SQL serverio operacijų replikacija prideda naujų lentelių be pakartotinio inicijavimo
Kitą:Praktinis SQL teiginys: datos įvertinimas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com