Kuo tiksliai skiriasi pirminis ir antrinis indeksai? Ir koks yra vieno pranašumas prieš kitą?


Atsakymas 1:

Pirmiausia leiskite man pasakyti panašumus:

Panašumai

  • Abi rodyklės struktūros yra įgyvendinamos kaip atskiri pirmosios klasės objektai duomenų bazėje. Tai reiškia, kad lentelė ir jos atitinkamas rodyklė (pirminis arba antrinis) egzistuoja kaip dvi atskiros struktūros. Bet ir įgyvendinkite neryžtingumo lygį, kai užklausos pirmiausia ieškos rodyklės, ir naudokite šios peržiūros rezultatą tiesiogiai gaudami įrašą, į kurį nurodo. Abiejų tipų indeksų blokai įrašus tvarko; ty koks yra tikrasis indekso įrašas → paprastai a , rodyklės bloko įrašai visada rūšiuojami rodyklės / paieškos klavišu.

Skirtumai

Pirminis indeksas

  • Pagrindinis rodyklė daro įtaką duomenų blokų eilučių saugojimui ir organizavimui. Duomenų blokai yra disko blokai, kuriuose kaupiami faktiniai eilučių duomenys (keli stulpeliai) .Primariniame indekse reikia, kad duomenų blokų eilutės būtų užsakomos rodyklės klavišu. Be to, kad patys rodyklės įrašai būtų surūšiuoti rodyklės bloke, pirminis rodyklė taip pat priverčia. eilučių užsakymas duomenų blokuose. Žemiau pateiktoje diagramoje, pasiskolintoje iš „Duomenų bazės sistemos įdiegimo, kurią atliko Garcia Molina ir kt.“, parodyta, kaip indekso įrašuose rodyklės blokuose (kairėje pusėje) yra rodyklės (tai yra eilučių lokacijos duomenų bazės terminologijoje) į atitinkamas eilutės duomenų blokuose (dešinėje pusėje). Kiekviename duomenų bloke yra eilutės, surūšiuotos pagal rodyklės klavišą.
  • Pirminį rodyklę galima sukurti tiek raktų, tiek ne raktų stulpeliuose. Nėra tokio dalyko, kaip pagrindinis indeksas yra skirtas tik pirminiam raktui. Taip, paprastai, jis sukuriamas naudojant pagrindinį lentelės raktą. Kadangi pirminis rodyklė keičia duomenų tvarkymo būdą (reikia išlaikyti eilutes), lentelėje gali būti ne daugiau kaip 1 pirminis rodyklė.

Antrinis indeksas

  • Antrinis rodyklė neturi jokios įtakos tam, kaip eilutės iš tikrųjų yra suskirstytos į duomenų blokus. Jie gali būti bet kokia tvarka. Vienintelis užsakymas yra rodyklės klavišas rodyklės blokuose. Žemiau pateiktoje diagramoje, pasiskolintoje iš „Duomenų bazės sistemos įdiegimo, kurią atliko Garcia Molina ir kt.“, Parodyta, kaip rodyklės įrašuose rodyklės blokuose (kairėje pusėje) yra rodyklės (tai yra eilučių ieškikliai duomenų bazės terminologijoje. ) prie atitinkamų eilučių duomenų blokuose (dešinėje pusėje). Duomenų blokuose nėra eilių, surūšiuotų rodyklės klavišu

Palyginimas

  • Pirma, vartotojas gali apibrėžti kelis antrinius indeksus, nes jie neturi įtakos lentelės eilučių organizavimui. Tačiau gali būti tik 1 pirminis rodyklė. Kadangi pirminis rodyklė nebūtinai turi būti pagrindinis raktas, pagrindinis rodyklė taip pat gali turėti pasikartojančius rodyklės raktus. Tiesą sakant, aukščiau pateiktas antrinio indekso pavyzdys yra raktų kopijos. Tai akivaizdu abiem atvejais. Akivaizdu, kad jei pagrindinis indeksas yra sukurtas naudojant pagrindinį raktą, tai negali būti dubliuojami rodyklės raktai, nes pirminis raktas vykdo UNIKALIĄ KONSTRAIPSNĮ. Tiek pirminis, tiek antrinis indeksai gali būti naudojami taškų paieškai ir diapazono užklausoms. Tačiau tikimasi, kad abiem atvejais pirminės rodyklės diapazono užklausos bus greitesnės - unikalus rodyklės raktas ir pasikartojantys rodyklės raktai. Tikimasi, kad taškų peržiūra, jei indeksas NENUMALUS yra pirminis indeksas, bus greitesnė. Bet jei rodyklė yra UNIKALI, idealu, jei taško paieška su pirminiu ir antriniu rodyklėmis turėtų užtrukti tiek pat laiko - mažiausiai tiek pat I / OPagrindinė rodyklė verčia užsakyti duomenų blokų eilutes. Taigi, jei vartotojui įdomu surasti eilutes, kur KUSTINIS RAKTAS = = 20 IR KREPŠELIS <= 40, yra didelė tikimybė perskaityti mažiau disko blokų ir tokiu būdu mažiau I / O. Gali būti, kad šiuos raktus atitinkančios eilutės yra tame pačiame duomenų bloke (net jei rodyklė nėra unikali). Kita vertus, antrinis rodyklė nekontroliuoja eilučių organizavimo. Taigi tame pačiame pavyzdyje, kaip surasti visus įrašus nuo 20 iki 40, gali būti, kad kiekvieną raktą atitinkantys įrašai yra atskiroje duomenų bloke. Tai akivaizdžiai reiškia, kad bus daugiau įvesties ir išvesties, taigi užklausos gali būti mažiau efektyvios naudojant antrinį rodyklę. Jei taškų paieškoje yra unikalių rodyklės klavišų, visiškai nesvarbu, ar rodyklė yra pirminė, ar antrinė. Paieškos rezultatas bus eilučių ieškiklis, ir duomenų bazė bet kokiu atveju turi ją sekti, kad patektų į tikrąjį įrašą. Taigi, ten bus vienas įvestis / išvestis. Kadangi pirminis rodyklė reikalauja, kad eilės būtų užsakomos duomenų blokuose, DML bus mažiau efektyvios. Kadangi DML reikia saugoti eilutes duomenų bloko eilės tvarka, INSERT / UPDATE sukels dažną eilutės judėjimą, nebent vartotojas rūpintųsi, kad intarpai būtų daromi paeiliui. Bet koks DML, dėl kurio eilučių judėjimas eina per duomenis nuo bloko taip pat reikės atnaujinti atitinkamą pirminės rodyklės struktūrą nuo rodyklės įrašo Dabar reikia atnaujinti nauju eilučių ieškikliu (nes eilutė buvo perkelta). Eilučių judėjimui taip pat reikės atnaujinti antrinę rodyklės struktūrą, tačiau tikimybė, kad INSERT sukels eilutės judėjimą, yra palyginti maža antriniam indeksui, nes INSERT tai daro nereikia saugoti eilių duomenų bloko eilės tvarka. Atvejai, kaip eilutės, kurių dydis auga, todėl jas reikia perkelti į visus kartu, skirtingas blokas yra vienas iš nedaugelio eilutės judėjimo atvejų antriniame indekse.

Atsakymas 2:

Pagrindinis rodyklė yra saugojimo struktūra, kurioje yra faktinės bazinės lentelės eilutės „B-medžio“ pagrindu sukurtoje saugojimo schemoje. Paprastai rodyklė organizuojama pagal PRIMARY KEY, jei toks yra.

Pirminiai indeksai kartais vadinami „grupiniais indeksais“, nors ne visi dalykai, vadinami klasteriais, yra „tikri“ pirminiai indeksų įgyvendinimai (ty PostgreSQL nėra).

Didžioji dauguma saugojimo variklių saugo bazinių lentelių eiles be jokio konkretaus užsakymo, gauto iš stulpelių duomenų, ir neįdiegia „tikrųjų“ pirminių indeksų.

Tik keli DB saugojimo varikliai iš tikrųjų įgyvendina pirminius indeksus. „Oracle“ „Organizuotos lentelės pagal rodyklę“ ir „MySQL InnoDB“ yra plačiausiai naudojami saugojimo varikliai, įgyvendinantys pirminius indeksus.

Didžiausias rodyklės pagrindu organizuotos saugojimo struktūros pranašumas yra tai, kad PAGRINDINĖJE KREPŠELYJE reikia vieno bazinio medžio „pasivaikščiojimo“. Daugelyje kitų saugojimo būdų PRIMARINIŲ PAGRINDINIŲ PAGRINDŲ peržiūra reikalauja dviejų pasivaikščiojimų: vienas turi ieškoti bazinės lentelės eilutės rodyklės antrinėje rodyklės struktūroje, pastatytoje aplink PK, ir pati eilutė atsisiųsti.

Šiomis priemonėmis PK peržiūros nėra pigesnės nei peržvalgos naudojant bet kurį kitą rodyklę.

Kadangi pirminės rodyklės yra naudojamos pagrindinės lentelės organizavimui, jūs gaunate tik vieną iš lentelės.

Didžiausias pirminio rodyklės saugojimo trūkumas, palyginti su kitomis saugyklų rūšimis, yra tas, kad jie gali būti įkeliami lėčiau, nes kiekvienas INSERT ant pagrindinio stalo turi nueiti B medį, kad sugalvotų, kur dėti eilę. Be to, kadangi dauguma saugyklų, palaikančių pirminius indeksus, naudoja pirminį indekso raktą kaip antrinių indeksų paieškos identifikatorių, galite turėti antrinius indeksus, kurie užima daug vietos, jei turite ilgą PRIMARY KEY (ty jei naudojate kažką panašaus į Pasauliniu mastu unikalus identifikatorius kaip PK ir turi kitus indeksus).


Atsakymas 3:

Pagrindinis rodyklė yra saugojimo struktūra, kurioje yra faktinės bazinės lentelės eilutės „B-medžio“ pagrindu sukurtoje saugojimo schemoje. Paprastai rodyklė organizuojama pagal PRIMARY KEY, jei toks yra.

Pirminiai indeksai kartais vadinami „grupiniais indeksais“, nors ne visi dalykai, vadinami klasteriais, yra „tikri“ pirminiai indeksų įgyvendinimai (ty PostgreSQL nėra).

Didžioji dauguma saugojimo variklių saugo bazinių lentelių eiles be jokio konkretaus užsakymo, gauto iš stulpelių duomenų, ir neįdiegia „tikrųjų“ pirminių indeksų.

Tik keli DB saugojimo varikliai iš tikrųjų įgyvendina pirminius indeksus. „Oracle“ „Organizuotos lentelės pagal rodyklę“ ir „MySQL InnoDB“ yra plačiausiai naudojami saugojimo varikliai, įgyvendinantys pirminius indeksus.

Didžiausias rodyklės pagrindu organizuotos saugojimo struktūros pranašumas yra tai, kad PAGRINDINĖJE KREPŠELYJE reikia vieno bazinio medžio „pasivaikščiojimo“. Daugelyje kitų saugojimo būdų PRIMARINIŲ PAGRINDINIŲ PAGRINDŲ peržiūra reikalauja dviejų pasivaikščiojimų: vienas turi ieškoti bazinės lentelės eilutės rodyklės antrinėje rodyklės struktūroje, pastatytoje aplink PK, ir pati eilutė atsisiųsti.

Šiomis priemonėmis PK peržiūros nėra pigesnės nei peržvalgos naudojant bet kurį kitą rodyklę.

Kadangi pirminės rodyklės yra naudojamos pagrindinės lentelės organizavimui, jūs gaunate tik vieną iš lentelės.

Didžiausias pirminio rodyklės saugojimo trūkumas, palyginti su kitomis saugyklų rūšimis, yra tas, kad jie gali būti įkeliami lėčiau, nes kiekvienas INSERT ant pagrindinio stalo turi nueiti B medį, kad sugalvotų, kur dėti eilę. Be to, kadangi dauguma saugyklų, palaikančių pirminius indeksus, naudoja pirminį indekso raktą kaip antrinių indeksų paieškos identifikatorių, galite turėti antrinius indeksus, kurie užima daug vietos, jei turite ilgą PRIMARY KEY (ty jei naudojate kažką panašaus į Pasauliniu mastu unikalus identifikatorius kaip PK ir turi kitus indeksus).


Atsakymas 4:

Pagrindinis rodyklė yra saugojimo struktūra, kurioje yra faktinės bazinės lentelės eilutės „B-medžio“ pagrindu sukurtoje saugojimo schemoje. Paprastai rodyklė organizuojama pagal PRIMARY KEY, jei toks yra.

Pirminiai indeksai kartais vadinami „grupiniais indeksais“, nors ne visi dalykai, vadinami klasteriais, yra „tikri“ pirminiai indeksų įgyvendinimai (ty PostgreSQL nėra).

Didžioji dauguma saugojimo variklių saugo bazinių lentelių eiles be jokio konkretaus užsakymo, gauto iš stulpelių duomenų, ir neįdiegia „tikrųjų“ pirminių indeksų.

Tik keli DB saugojimo varikliai iš tikrųjų įgyvendina pirminius indeksus. „Oracle“ „Organizuotos lentelės pagal rodyklę“ ir „MySQL InnoDB“ yra plačiausiai naudojami saugojimo varikliai, įgyvendinantys pirminius indeksus.

Didžiausias rodyklės pagrindu organizuotos saugojimo struktūros pranašumas yra tai, kad PAGRINDINĖJE KREPŠELYJE reikia vieno bazinio medžio „pasivaikščiojimo“. Daugelyje kitų saugojimo būdų PRIMARINIŲ PAGRINDINIŲ PAGRINDŲ peržiūra reikalauja dviejų pasivaikščiojimų: vienas turi ieškoti bazinės lentelės eilutės rodyklės antrinėje rodyklės struktūroje, pastatytoje aplink PK, ir pati eilutė atsisiųsti.

Šiomis priemonėmis PK peržiūros nėra pigesnės nei peržvalgos naudojant bet kurį kitą rodyklę.

Kadangi pirminės rodyklės yra naudojamos pagrindinės lentelės organizavimui, jūs gaunate tik vieną iš lentelės.

Didžiausias pirminio rodyklės saugojimo trūkumas, palyginti su kitomis saugyklų rūšimis, yra tas, kad jie gali būti įkeliami lėčiau, nes kiekvienas INSERT ant pagrindinio stalo turi nueiti B medį, kad sugalvotų, kur dėti eilę. Be to, kadangi dauguma saugyklų, palaikančių pirminius indeksus, naudoja pirminį indekso raktą kaip antrinių indeksų paieškos identifikatorių, galite turėti antrinius indeksus, kurie užima daug vietos, jei turite ilgą PRIMARY KEY (ty jei naudojate kažką panašaus į Pasauliniu mastu unikalus identifikatorius kaip PK ir turi kitus indeksus).