Quina diferència hi ha exactament entre l’índex primari i l’índex secundari? I quin avantatge té l’un sobre l’altre?


Resposta 1:

Permetin-me explicar les similituds primer:

Semblances

  • Les dues estructures d'índex s'implementen com a objectes de primera classe separats a la base de dades. Això implica que la taula i el seu índex corresponent (primari o secundari) existeixen com a dues estructures separades. Tanmateix, s’implementa un nivell d’indirecció on les consultes primer cerquen l’índex i s’utilitza el resultat d’aquesta cerca per obtenir directament el registre que està apuntant. Els blocs d'índexs dels dos tipus d'índexs ordenen les entrades; és a dir, qualsevol que sigui l’entrada real de l’índex → ​​és generalment a , les entrades al bloc d'índex sempre s'ordenen a la clau d'índex / de cerca.

Diferències

Índex primari

  • Un índex primari afecta l’emmagatzematge i l’organització de files en blocs de dades. Els blocs de dades són blocs de disc que emmagatzemen les dades de fila reals (diverses columnes). El primer índex requereix que les files de blocs de dades s'ordenin a la clau d'índex. A més de que les entrades d'índex s'ordenen en el bloc d'índexs, l'índex principal també s'aplica. una ordenació de files en els blocs de dades. El diagrama següent que es pren amb “La implementació del sistema de bases de dades per Garcia Molina et al” mostra com les entrades d’índexs en els blocs d’índexs (costat esquerre) contenen indicadors (es tracta d’ubicadors de fila en terminologia de bases de dades) al corresponent. files en blocs de dades (costat dret). Cada bloc de dades té unes files ordenades segons la clau d'índex.
  • Es pot crear un índex principal a les columnes de clau i no clau. No hi ha cap cosa que l'índex primari només sigui destinat a clau primària. Però, sí, normalment es crea a la clau primària de table.Since que l’índex primari altera la forma (cal mantenir ordenades les files) les dades s’organitzen en una taula, hi pot haver un màxim d’índex primari en una taula determinada.

Índex secundari

  • L’índex secundari no té cap impacte sobre l’organització de les files en blocs de dades. Poden ser de qualsevol ordre. L’única ordenació és wrt la clau índex en blocs d’índexs. El diagrama que es presenta a la secció “Implementació del sistema de bases de dades per Garcia Molina et al” mostra com les entrades d’índex als blocs d’índex (costat esquerre) contenen indicadors (es troben ubicadors de fila a la terminologia de bases de dades. ) a les files corresponents als blocs de dades (costat dret). Els blocs de dades no tenen files ordenats a la clau d'índex

Comparació

  • En primer lloc, l'usuari pot definir diversos índexs secundaris perquè no tenen cap impacte en l'organització de files de la taula. Però només hi pot haver 1 índex primari. Perquè l’índex primari no necessàriament ha d’estar en clau primària, l’índex primari també pot tenir claus d’índex duplicat. De fet, l'exemple que es mostra anteriorment per a l'índex secundari és per a claus duplicades. Això és comú per a tots dos.Per descomptat, si l’índex primari es crea en clau primària, no hi pot haver claus índexs duplicades ja que la clau primària obliga a fer un índex CONSTRAINT Únic. Però els índexs primaris i secundaris poden utilitzar-se per a consultes puntuals i consultes d’abast. No obstant això, s'espera que les consultes de rang siguin més ràpides per a l'índex principal en els dos casos: clau d'índex única i claus índexs duplicades. S’espera que les cerques puntuals en cas d’índex NON UNIQUE siguin més ràpides amb un índex principal. Però si l’índex és únic, la cerca de punts amb índex primari i secundari hauria de tenir idealment la mateixa quantitat de temps, almenys la mateixa quantitat d’I / O La raó és que l’índex primari obliga a ordenar les files dels blocs de dades. Així, si l’usuari està interessat a trobar files per WHERE KEY> = 20 I CLAU <= 40, hi ha grans possibilitats de llegir menys blocs de disc i, per tant, menys E / S. Podria ser possible que les files corresponents a aquestes claus estiguin al mateix bloc de dades (fins i tot si l’índex no és únic). D’altra banda, l’índex secundari no té cap control sobre l’organització de files. De manera que amb el mateix exemple de trobar tots els registres entre 20 i 40, és possible que el registre (s) corresponent a cada clau estigui assegut al seu propi bloc de dades. Això òbviament implica que hi haurà més E / S i, per tant, les consultes poden ser menys eficients amb l'índex secundari. Per a les cerques puntuals amb claus índexes úniques, no importa si l'índex és primari o secundari. El resultat de la cerca serà un localitzador de fila i la base de dades haurà de seguir-la de totes maneres per arribar al registre real. Així, hi haurà una sola E / S. Perquè l’índex primari obliga a ordenar les files en blocs de dades, els DML seran menys eficients. Com que els DML necessiten mantenir les files en un ordre ordenat dins d’un bloc de dades, INSERT / ACTUALITZACIÓ farà que es produeixi un moviment freqüent de fila a menys que l’usuari tingui cura que les insercions es facin en un ordre seqüencial. Qualsevol DML que tingui com a resultat un moviment de fila d’una fila dins d’una dada El bloc també requerirà una actualització de l'estructura d'índex principal corresponent des de l'entrada de l'índex ara s'ha d'actualitzar amb un nou localitzador de fila (perquè la fila s'ha mogut). El moviment de fila també requerirà una actualització a l'estructura d'índexs secundaris, però la probabilitat que un INSERT provoqui un moviment de fila és relativament baix per a un índex secundari ja que l'INSERT ho fa. no cal que manteniu les files en un ordre ordenat dins d’un bloc de dades. Uns dels pocs casos de moviment de fila a l'índex secundari són casos com el de les files que creixen de mida i, per tant, cal que es mogui en un bloc diferent.

Resposta 2:

Un índex primari és una estructura d'emmagatzematge que conté les files de base reals de la taula en un disseny d'emmagatzematge basat en l'arbre B. Típicament, l'índex s'organitza al voltant de la CLAU PRIMÀRIA si se'n proporciona un.

Els índexs primaris de vegades s'anomenen "índexs agrupats", tot i que no totes les coses anomenades índexs agrupats són implementacions d'índexs primaris "reals" (és a dir, el de PostgreSQL no).

La gran majoria dels motors d'emmagatzematge emmagatzemen files de taules de base sense cap ordre particular derivat de les dades de les columnes i no implementen índexs primaris "veritables".

Només uns quants motors d'emmagatzematge de DB implementen índexs primaris. Oracle “Table Organized Index” i MySQL InnoDB són els motors d’emmagatzematge més utilitzats que implementen índexs primaris.

El major avantatge d'una estructura d'emmagatzematge organitzada per índex és que les recerques a la CLAU PRIMÀRIA requereixen un únic "passeig" de l'arbre B de base. En la majoria dels altres arranjaments d’emmagatzematge, les cerques de PRIMÀRIA CLAU requereixen dos passejos: un per buscar el punter de fila de taula de base en una estructura d’índex secundari construïda al voltant del PK i el fet de fila en si.

En aquests arranjaments, les cerques PK no són més barates que les cerques mitjançant qualsevol altre índex.

Com que s'utilitza un índex primari per a l'organització de la taula base, només se n'obté un per taula.

L’inconvenient més gran de l’emmagatzematge d’índexs primaris respecte d’altres tipus d’emmagatzematge és que poden carregar-se més lent, ja que cada INSERT de la taula base ha de caminar un arbre B per esbrinar on posar la fila. A més, atès que la majoria de motors d’emmagatzematge que admeten índexs primaris utilitzen la clau d’índex primari com a identificador de cerca d’índexs secundaris, podeu tenir índexs secundaris que ocupen molt d’espai si teniu una tecla PRIMÀRIA llarga (és a dir, si feu servir alguna cosa com una Identificador exclusiu mundialment com a PK i amb altres índexs).


Resposta 3:

Un índex primari és una estructura d'emmagatzematge que conté les files de base reals de la taula en un disseny d'emmagatzematge basat en l'arbre B. Típicament, l'índex s'organitza al voltant de la CLAU PRIMÀRIA si se'n proporciona un.

Els índexs primaris de vegades s'anomenen "índexs agrupats", tot i que no totes les coses anomenades índexs agrupats són implementacions d'índexs primaris "reals" (és a dir, el de PostgreSQL no).

La gran majoria dels motors d'emmagatzematge emmagatzemen files de taules de base sense cap ordre particular derivat de les dades de les columnes i no implementen índexs primaris "veritables".

Només uns quants motors d'emmagatzematge de DB implementen índexs primaris. Oracle “Table Organized Index” i MySQL InnoDB són els motors d’emmagatzematge més utilitzats que implementen índexs primaris.

El major avantatge d'una estructura d'emmagatzematge organitzada per índex és que les recerques a la CLAU PRIMÀRIA requereixen un únic "passeig" de l'arbre B de base. En la majoria dels altres arranjaments d’emmagatzematge, les cerques de PRIMÀRIA CLAU requereixen dos passejos: un per buscar el punter de fila de taula de base en una estructura d’índex secundari construïda al voltant del PK i el fet de fila en si.

En aquests arranjaments, les cerques PK no són més barates que les cerques mitjançant qualsevol altre índex.

Com que s'utilitza un índex primari per a l'organització de la taula base, només se n'obté un per taula.

L’inconvenient més gran de l’emmagatzematge d’índexs primaris respecte d’altres tipus d’emmagatzematge és que poden carregar-se més lent, ja que cada INSERT de la taula base ha de caminar un arbre B per esbrinar on posar la fila. A més, atès que la majoria de motors d’emmagatzematge que admeten índexs primaris utilitzen la clau d’índex primari com a identificador de cerca d’índexs secundaris, podeu tenir índexs secundaris que ocupen molt d’espai si teniu una tecla PRIMÀRIA llarga (és a dir, si feu servir alguna cosa com una Identificador exclusiu mundialment com a PK i amb altres índexs).


Resposta 4:

Un índex primari és una estructura d'emmagatzematge que conté les files de base reals de la taula en un disseny d'emmagatzematge basat en l'arbre B. Típicament, l'índex s'organitza al voltant de la CLAU PRIMÀRIA si se'n proporciona un.

Els índexs primaris de vegades s'anomenen "índexs agrupats", tot i que no totes les coses anomenades índexs agrupats són implementacions d'índexs primaris "reals" (és a dir, el de PostgreSQL no).

La gran majoria dels motors d'emmagatzematge emmagatzemen files de taules de base sense cap ordre particular derivat de les dades de les columnes i no implementen índexs primaris "veritables".

Només uns quants motors d'emmagatzematge de DB implementen índexs primaris. Oracle “Table Organized Index” i MySQL InnoDB són els motors d’emmagatzematge més utilitzats que implementen índexs primaris.

El major avantatge d'una estructura d'emmagatzematge organitzada per índex és que les recerques a la CLAU PRIMÀRIA requereixen un únic "passeig" de l'arbre B de base. En la majoria dels altres arranjaments d’emmagatzematge, les cerques de PRIMÀRIA CLAU requereixen dos passejos: un per buscar el punter de fila de taula de base en una estructura d’índex secundari construïda al voltant del PK i el fet de fila en si.

En aquests arranjaments, les cerques PK no són més barates que les cerques mitjançant qualsevol altre índex.

Com que s'utilitza un índex primari per a l'organització de la taula base, només se n'obté un per taula.

L’inconvenient més gran de l’emmagatzematge d’índexs primaris respecte d’altres tipus d’emmagatzematge és que poden carregar-se més lent, ja que cada INSERT de la taula base ha de caminar un arbre B per esbrinar on posar la fila. A més, atès que la majoria de motors d’emmagatzematge que admeten índexs primaris utilitzen la clau d’índex primari com a identificador de cerca d’índexs secundaris, podeu tenir índexs secundaris que ocupen molt d’espai si teniu una tecla PRIMÀRIA llarga (és a dir, si feu servir alguna cosa com una Identificador exclusiu mundialment com a PK i amb altres índexs).