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