Indeksas padeda SQL serveriui greitai gauti duomenis iš eilučių. Rodyklės veikia kaip knygų pradžioje esantis turinys, leidžiantis greitai peržiūrėti temos puslapį. Be indeksų, SQL serveris turi nuskaityti visas lentelės eilutes, kad surastų įrašą.
„SQL Server“ yra dviejų tipų indeksai: sugrupuoti ir nesugrupuoti. Sužinokite, kuo skiriasi sugrupuoti ir negrupuoti indeksai ir kodėl jie svarbūs.
Sugrupuotas indeksas SQL serveryje
Sugrupuotame indekse duomenų eilutės fiziškai saugomos tvarkingai, remiantis rakto verte. Kadangi į indeksą įtraukta lentelė ir ji gali tvarkyti eilutes tik viena tvarka, vienoje lentelėje galite sukurti tik vieną sugrupuotą indeksą.
Nors indeksai leidžia greičiau nuskaityti diapazono eilutes, INSERT ir UPDATE teiginiai gali būti lėtas, nes užklausos optimizavimo priemonė nuskaito indeksą eilės tvarka, kol randa tikslinį indeksą.
Negrupuotas indeksas SQL serveryje
Nesugrupuotame indekse yra pagrindinės reikšmės, kurių įrašas yra rodyklė, vadinama eilutės ieškikliu. Sugrupuotų lentelių (lentelių su grupiniu indeksu) žymeklis nurodo į klasterizuoto indekso raktą, kuris savo ruožtu nurodo lentelės eilutę. Eilučių be grupinio indekso žymeklis nukreipia tiesiai į lentelės eilutę.
Kaip sukurti grupinį indeksą SQL serveryje
Kai kuriate lentelę su pirminiu raktu, SQL serveris automatiškai sukuria sugrupuotą indekso raktą pagal tą pirminį raktą. Jei neturite pirminio rakto, galite vykdyti šį teiginį, kad sukurtumėte sugrupuotą indekso raktą.
KURTI KLASTERIUOTA INDEKSAS <indeksasvardas>
ANT STALO <lentelės_pavadinimas>(stulpelio_pavadinimas)
Šiame teiginyje nurodote indekso pavadinimą, lentelės, kurioje ji bus kuriama, pavadinimą ir stulpelio pavadinimą, kurį naudosite indekse.
Jei pridedate pirminį raktą į lentelę, kurioje jau yra sugrupuotas indeksas, SQL Server su juo sukurs nesugrupuotą indeksą.
Norėdami sukurti sugrupuotą indeksą, kuriame nėra pirminio rakto stulpelio, pirmiausia turite atsisakyti pirminio rakto apribojimo.
NAUDOTIduomenų bazės_pavadinimas
ALTERLENTELĖ lentelės_pavadinimas
NULEISTIAPRIBOJIMAS pk_vardas
EIK
Pašalinus pirminio rakto apribojimus, pašalinamas ir sugrupuotas indeksas, leidžiantis sukurti pasirinktinį.
Kaip sukurti nesugrupuotą indeksą SQL serveryje
Norėdami sukurti nesugrupuotą indeksą, naudokite šį teiginį.
KURTIINDEKSAS <indeksasvardas>
ANT STALO <lentelės_pavadinimas>(stulpelio_pavadinimas)
Taip pat galite naudoti NONCLUSTERED raktinį žodį, pavyzdžiui:
KURTI [NEKLUSTERIUOTA] INDEKSAS <indeksasvardas>
ANT STALO <lentelės_pavadinimas>(stulpelio_pavadinimas)
Šis teiginys sukuria nesugrupuotą indeksą jūsų nurodytoje lentelėje ir apima jūsų nurodytą stulpelį.
Jei norite, galite rūšiuoti stulpelius didėjančia (ASC) arba mažėjančia (DESC) tvarka.
KURTI [NEKLUSTERIUOTA] INDEKSAS <indeksasvardas>
ANT STALO <lentelės_pavadinimas>(stulpelio_pavadinimas ASC/DESC)
Kurį indeksą turėtumėte pasirinkti?
Tiek sugrupuoti, tiek nesugrupuoti indeksai pagerina užklausų pateikimo laiką. Jei dauguma jūsų užklausų yra SELECT operacijos keliuose lentelės stulpeliuose, sugrupuoti indeksai yra greitesni. Tačiau atliekant INSERT arba UPDATE operacijas, nesugrupuoti indeksai yra greitesni, nes užklausos optimizavimo priemonė gali rasti stulpelį tiesiai iš indekso.
Kaip matote, šie indeksai geriausiai tinka skirtingos SQL užklausos. Todėl daugumai SQL duomenų bazių bus naudinga turėti bent vieną sugrupuotą indeksą ir negrupuotus stulpelių indeksus, kurie yra reguliariai atnaujinami.
Indeksų svarba SQL serveryje
Sugrupuoti ir nesugrupuoti indeksai užtikrina didesnį užklausos našumą. Kai vykdote užklausą, užklausos optimizavimo priemonė nuskaito eilutės saugojimo vietos indeksą ir nuskaito informaciją iš tos vietos. Tai daug greičiau nei nuskaityti visas lentelės eilutes.
Taip pat galite naudoti nesugrupuotus indeksus, kad išspręstumėte žymių paieškos aklavietes, sukurdami nesugrupuotą indeksą stulpeliams, kuriuos pasiekia užklausos.