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

Rodinys: 11383|Atsakyti: 0

[Komunikatas] SQL serverio sudėtinio indekso mokymasis

[Kopijuoti nuorodą]
Paskelbta 2015-01-29 13:06:03 | | |

Apžvalga
Kas yra vienas indeksas ir kas yra sudėtinis indeksas? Kada sukurti naują sudėtinį indeksą ir į ką turėčiau atkreipti dėmesį sudėtiniame indekse? Šis straipsnis daugiausia yra kai kurių diskusijų internete santrauka.

Vienas. Koncepcija

Vienas indeksas yra situacija, kai indeksas pateikiamas viename stulpelyje, tai yra, naujo indekso sukūrimo teiginys įgyvendinamas tik viename stulpelyje.

Vartotojai gali kurti kelių stulpelių indeksus, kurie vadinami sudėtiniais indeksais (kombinuotais indeksais). Sudėtiniai indeksai kuriami lygiai taip pat, kaip ir atskiri indeksai. Tačiau sudėtiniams indeksams reikia mažiau pridėtinių išlaidų atliekant duomenų bazės operacijas ir jie gali pakeisti kelis atskirus indeksus. Kai eilučių skaičius lentelėje yra daug didesnis nei raktų skaičius, šis metodas gali žymiai pagreitinti lentelės užklausos greitį.

Vienu metu yra dvi sąvokos: siauri indeksai ir platūs indeksai, siauri indeksai nurodo indeksus su 1-2 stulpeliais ir paprastai nurodo vieną indeksą, jei nenurodyta kitaip. Platus indeksas yra indeksas, turintis daugiau nei 2 stulpelius.

Svarbus indekso kūrimo principas yra naudoti siaurus indeksus, o ne plačius indeksus, nes siauri indeksai paprastai yra efektyvesni nei kombinuoti indeksai. Turėdamas siauresnius indeksus, optimizatorius turės daugiau pasirinkimo, o tai dažnai padeda pagerinti našumą.

Du. Naudojimas

Indekso kūrimas
Kurti indeksą IDX1 lentelėje1(COL1,COL2,COL3)  
Paklausti
pasirinkite * iš 1 lentelės, kur col1= A ir col2= B ir col3 = C

Šiuo metu užklausų optimizavimo priemonė nenuskaito lentelės, o tiesiogiai paima duomenis iš indekso, nes šie duomenys yra indekse, kuris vadinamas perdangos užklausa, o užklausos greitis yra labai didelis.   

Trys. Pastabos:

1. Kada naudoti sudėtinį indeksą
Esant sąlygai where, laukas indeksuojamas, o jei naudojami keli laukai, naudojamas sudėtinis indeksas. Paprastai nekurkite jokių indeksų pasirinkimo lauke (jei norite užklausti pasirinkti col1, col2, col3 iš mytable, jums nereikia aukščiau pateiktos rodyklės). Indeksavimas pagal sąlygas yra nepaprastai svarbus principas. Būkite atsargūs ir nenaudokite per daug indeksų, kitaip tai turės didelę įtaką lentelių atnaujinimo efektyvumui, nes dirbdami su lentelėmis turite praleisti daug laiko kurdami indeksus.

2. Sudėtiniams indeksams, naudojant užklausą, geriausia laikytis indeksų paieškos tvarkos, kuri yra efektyviausia. Pavyzdžiui:  
  IDX1: sukurti indeksą IDX1 lentelėje1 (col2, col3, col5)  
  pasirinkite * iš 1 lentelės, kur col2=A ir col3=B ir col5=D  

Jei jis yra "pasirinkite * iš lentelės1, kur col3=B ir col2=A ir col5=D"
Arba "pasirinkite * iš lentelės1, kur col3=B" nenaudos indekso, arba efektas nepastebimas

3. Ar sudėtinis indeksas pakeis vieną indeksą?
Daugelis žmonių mano, kad bet kurio lauko įtraukimas į grupinį indeksą gali pagerinti užklausos greitį, tačiau kai kurie žmonės yra sutrikę: jei sudėtiniai sugrupuoti indekso laukai užklausiami atskirai, ar užklausos greitis bus sulėtintas? Su šiuo klausimu pažvelkime į šį užklausos greitį (rezultatų rinkinys yra 250 000 duomenų vienetų) :( datos stulpelis fariqi užima pirmą vietą sudėtinio agregavimo indekso pradiniame stulpelyje, o vartotojo vardas neibuyonghu užima antrą vietą)

IDX1:create   index   idx1   on   Tgongwen(fariqi,neibuyonghu)  

(1) pasirinkite gid, fariqi, neibuyonghu, pavadinimas iš Tgongwen
kur fariqi>'2004-5-5'

Užklausos greitis: 2513 ms

(2) pasirinkite gid, fariqi, neibuyonghu, pavadinimas iš Tgongwen
kur fariqi>'2004-5-5' ir neibuyonghu='biuras'

Užklausos greitis: 2516 ms

(3) pasirinkite gid, fariqi, neibuyonghu, pavadinimas iš Tgongwen
kur neibuyonghu='biuras'

Užklausos greitis: 60280 milisekundžių

Iš aukščiau pateiktų eksperimentų matome, kad jei kaip užklausos sąlyga naudojamas tik pradinis sugrupuoto indekso stulpelis, visų stulpelių su sudėtiniu sugrupuotu indeksu užklausos greitis yra beveik vienodas, net šiek tiek greitesnis nei naudojant visus sudėtinius indekso stulpelius (kai užklausos rezultatų rinkinių skaičius yra vienodas). Jei kaip užklausos sąlygos naudojami tik nepradiniai sudėtinio agreguoto indekso stulpeliai, šis indeksas nieko nedarys. Žinoma, 1 ir 2 teiginių užklausos greitis yra vienodas, nes užklausos įrašų skaičius yra vienodas, jei naudojami visi sudėtinio indekso stulpeliai, o užklausos rezultatų yra nedaug, tai sudarys "indekso nepaisymą", kad būtų galima optimizuoti našumą. Be to, atminkite, kad nesvarbu, ar dažnai naudojate kitus agregavimo indekso stulpelius, ar ne, pirmaujantis stulpelis turi būti naudojamas dažniausiai.

[Nuoroda: Užklausų optimizavimo ir puslapių sudarymo algoritmo schema http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Ar man reikia sukurti vieną indeksą ir sudėtinį indeksą tame pačiame stulpelyje tuo pačiu metu?
Eksperimentas: Sysbase 5.0 lentelės lentelė1 laukai: col1, col2, col3  

Bandymo žingsniai:  
(1) Sukurkite indeksą idx1 stulpelyje  
  Vykdyti select * iš table1, kur col1=A naudoja idx1  
  Vykdyti select * iš table1, kur col1=A ir col2=B taip pat naudoja idx1  

(2) Ištrinkite indeksą idx1 ir sukurkite idx2 (col1,col2) sudėtiniame indekse  
  Abi užklausos naudoja idx2  

(3) Jei yra abu indeksai idx1 ir idx2  
  Tai nėra ten, kur col1='A' naudoja idx1; kur col1=A ir col2=B naudoja idx2.  
  Jo užklausų optimizavimo priemonė naudoja vieną iš anksčiau dažniausiai naudotų indeksų. Naudokite idx1 arba idx2.  
   
Galima pastebėti, kad
(1) Jei lentelėje yra sudėtinis indeksas (col1, col2), nereikia vienu metu kurti vieno indekso col1.
(2) Jei užklausos sąlygos to reikalauja, galite pridėti sudėtinį indeksą (col1, col2), kai jau yra vienas indeksas col1, o tai gali pagerinti efektyvumą tam tikru mastu.
(3) Nėra labai daug naudos sudarant sudėtinį indeksą su keliais laukais (turinčiais 5 arba 6 laukus) vienu metu, santykinai kalbant, sukūrus indeksą su keliais siaurais laukais (turinčiais tik vieną arba daugiausiai 2 laukus) galima pasiekti didesnį efektyvumą ir lankstumą.



5. Ar turiu atsakyti į užklausą?
Paprastai geriausia nenaudoti strategijos, kurioje pabrėžiama visa užklausų aprėptis. Jei visi sąlygos Select stulpeliai yra perrašyti negrupiniu indeksu, optimizavimo priemonė tai atpažins ir užtikrins gerą našumą. Tačiau dėl to dažnai gaunamas pernelyg platus indeksas ir pernelyg pasikliaujama tikimybe, kad optimizatorius naudos politiką. Paprastai siauros rodyklės naudojamos didesniam užklausų skaičiui, o tai užtikrina geresnį didelių užklausų našumą.




Ankstesnis:C# winform apsaugo nuo sql injekcijos
Kitą:"Dell Server" klaidų kodai ir sprendimai 2013 m. leidimas
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