Selv om det finnes mange måter å forbedre databaseytelsen på, er én funksjon nesten universell for enhver database. Databaseindekser er datastrukturer eller objekter som brukes til å øke hastigheten på datahentingen fra tabellen.
Når de brukes riktig, kan databaseindekser redusere hastigheten på en spørring med nesten halvparten, avhengig av måldata, layout, tilgjengelige ressurser osv.
I denne opplæringen skal du lære hvordan du arbeider med unike indekser i Oracle-databaser for å forhindre tilgjengeligheten av dupliserte verdier i en indeksert kolonne.
Oracle Unique Index
Vi kan bruke en unik indeks for å sikre at ingen dupliserte rader lagres i en gitt kolonne. Hvis kolonnen i en gitt indeks inneholder en unik regel, vil forsøk på å legge til to rader med en lignende verdi i den kolonnen resultere i en feil som indikerer et unikt brudd på begrensninger.
I Oracle kan vi lage en unik indeks ved å bruke CREATE UNIQUE INDEX-setningen som vist i følgende:
LAG UNIK INDEKS indeksnavn PÅ tabellnavn ( kolonner ) ;
Kolonnene som er inkludert i indeksen vil ikke akseptere noen dupliserte rader.
Eksempel på unik tabellillustrasjon
For å demonstrere hvordan du oppretter og bruker en unik indeks, ta følgende tabell:
PLUKKE UT * FROM sample_data;
Produksjon :
Lag en unik indeks på kolonnen Fornavn
Følgende eksempelsetning viser hvordan du oppretter en unik indeks ved å bruke kolonnen fornavn:
opprette unik indeks fornavn_unik på sample_data ( fornavn ) ;Ved å aktivere denne indeksen kan vi ikke sette inn mer enn én rad med samme fornavn.
Ta for eksempel følgende insert-setning:
sette inn i sample_data ( id , fornavn, ip_adresse, btc_adresse, kredittkort, identifikator )verdier ( elleve , 'Wallas' , '169.158.70.77' , '1CNz5d1d5SC8SaR6dFSVihwztqYx5Fg77q' , '4017955174552' ,
'26811d77-0a3a-4397-bc33-f7835f7c7ab9' ) ;
Hvis vi kjører den gitte insert-setningen, bør vi få en feilmelding som vist i følgende:
[ 23000 ] [ 1 ] ORA-00001: unik begrensning ( HR.FIRST_NAME_UNIQUE ) krenketSom vi kan se, bryter innsetting av den gitte verdien den unike begrensningen for kolonnen fornavn.
Lag en unik indeks med to kolonner
Vi kan også ha en unik indeks som består av mer enn én kolonne. I følgende eksempel lager vi en unik indeks ved å bruke fornavn og io_adresse kolonnene:
opprette unike indeksbekreftelseskolonner på sample_data ( fornavn, ip_adresse ) ;På samme måte vil det å legge til dupliserte verdier for enten fornavn- eller ip_adresse-kolonnen resultere i unike indeksbruddsfeil.
Automatiske unike indekser
Har du noen gang lurt på hva som skjer når du erklærer en tabellkolonne med en primærnøkkel eller unik begrensning?
Enkelt sagt, hvis du angir en kolonne som tabellens primærnøkkel eller tildeler en unik begrensning til en gitt kolonne, oppretter databasemotoren automatisk en unik indeks for den kolonnen.
Dette sikrer at ingen duplikatverdi settes inn i den kolonnen.
Ta for eksempel følgende utsagn:
opprette tabell sample_data(
id Antall,
fornavn varchar2 ( femti ) ,
ip_adresse varchar2 ( tjue ) ,
btc_adresse varchar2 ( femti ) ,
kredittkort varchar2 ( femti ) ,
identifikator varchar2 ( 40 ) ,
constraint sample_pk primærnøkkel ( id )
) ;
I forrige eksempel lager vi en tabell og setter id-kolonnen som tabellens primærnøkkel. Deretter, for å se den unike begrensningen knyttet til den kolonnen (generert automatisk), kan vi kjøre følgende kommando:
plukke ut indeksnavn, indekstype, synlighet, status, TABLE_NAMEfra alle_indekser der TABLE_NAME = 'EKSEMPELDATA' ;
Resultater :
I dette tilfellet kan vi se den unike indeksen som er opprettet av databasemotoren for id-kolonnen.
Konklusjon
I denne veiledningen lærte du hvordan du oppretter og bruker de unike indeksene i Oracle-databasen. Du har også lært hva som skjer når du tilordner en primærnøkkel eller unik begrensning til en tabellkolonne.