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ą. |