MySQL Index Tutorial - Create, Add & Miste

Innholdsfortegnelse:

Anonim

Hva er en indeks?

Indekser i MySQL sorterer data på en organisert sekvensiell måte. De opprettes på kolonnene som skal brukes til å filtrere dataene. Tenk på en indeks som en alfabetisk sortert liste. Det er lettere å slå opp navn som er sortert i alfabetisk rekkefølge enn de som ikke er sortert.

Å bruke en indeks på tabeller som ofte oppdateres, kan føre til dårlig ytelse. Dette skyldes at MySQL oppretter en ny indeksblokk hver gang data blir lagt til eller oppdatert i tabellen. Vanligvis bør indekser brukes på tabeller hvis data ikke endres ofte, men brukes mye i utvalgte søk.

Hva bruker en indeks?

Ingen liker sakte systemer. Høy systemytelse er av største betydning i nesten alle databasesystemer. De fleste bedrifter investerer tungt i maskinvare slik at datainnhenting og manipulasjoner kan bli raskere. Men det er grense for maskinvareinvesteringer en bedrift kan gjøre. Optimalisering av databasen din er en billigere og bedre løsning.

Tregheten i responstiden skyldes vanligvis at postene lagres tilfeldig i databasetabeller. Søkespørsmål må gå gjennom alle tilfeldig lagrede postene etter hverandre for å finne de ønskede dataene. Dette resulterer i databaser med dårlig ytelse når det gjelder å hente data fra store tabeller. Derfor brukes indekser som sorterer data for å gjøre det lettere å søke.

Syntaks: Opprett indeks

Indekser kan defineres på to måter

  1. På tidspunktet for bordopprettelsen
  2. Etter at tabellen er opprettet
Eksempel:

For myflixdb forventer vi mange søk til databasen med fullt navn.

Vi legger til kolonnen "fullnavn" i indeksen i en ny tabell "medlemmer_indeksert".

Skriptet vist nedenfor hjelper oss med å oppnå det.

CREATE TABLE `members_indexed` (`membership_number` int(11) NOT NULL AUTO_INCREMENT,`full_names` varchar(150) DEFAULT NULL,`gender` varchar(6) DEFAULT NULL,`date_of_birth` date DEFAULT NULL,`physical_address` varchar(255) DEFAULT NULL,`postal_address` varchar(255) DEFAULT NULL,`contact_number` varchar(75) DEFAULT NULL,`email` varchar(255) DEFAULT NULL,PRIMARY KEY (`membership_number`),INDEX(full_names)) ENGINE=InnoDB;

Utfør SQL-skriptet ovenfor i MySQL-arbeidsbenk mot "myflixdb".

Oppdatering av myflixdb viser den nyopprettede tabellen med navnet members_indexed.

"Merk" members_indexed-tabellen har "fullnavn" i indeksenoden.

Etter hvert som medlemsbasen utvides og antall poster øker, vil søk på medlems_indeksertabellen som bruker WHERE- og ORDER BY-leddene være mye raskere sammenlignet med de som ble utført i medlemstabellen uten indeksen definert.

Legg til indeks grunnleggende syntaks

Ovennevnte eksempel opprettet indeksen når definere databasetabellen. Anta at vi allerede har definert en tabell, og søkene på den er veldig sakte. De tar for lang tid å returnere resultatene. Etter å ha undersøkt problemet oppdager vi at vi i stor grad kan forbedre systemytelsen ved å lage INDEX i den mest brukte kolonnen i WHERE-setningen.

Vi kan bruke følgende spørsmål for å legge til indeks

CREATE INDEX id_index ON table_name(column_name);

La oss anta at søk på filmtabellen er veldig sakte, og vi vil bruke en indeks på "filmtittelen" for å øke hastigheten på spørsmålene. Vi kan bruke følgende skript for å oppnå det.

CREATE INDEX `title_index` ON `movies`(`title`);

Å utføre spørringen ovenfor oppretter en indeks på tittelfeltet i filmtabellen.

Dette betyr at alle søkene på filmbordet som bruker "tittelen" vil være raskere.

Søkespørsmål på andre felt i filmtabellen vil imidlertid fortsatt være tregere sammenlignet med de som er basert på det indekserte feltet.

Merk: Du kan opprette indekser på flere kolonner om nødvendig, avhengig av feltene du har tenkt å bruke for databasesøkemotoren.

Hvis du vil se indeksene som er definert i en bestemt tabell, kan du bruke følgende skript for å gjøre det.

SHOW INDEXES FROM table_name;

La oss nå se på alle indeksene som er definert på filmbordet i myflixdb.

SHOW INDEXES FROM `movies`;

Å utføre ovennevnte skript i MySQL arbeidsbenk mot myflixdb gir oss resultater på indeks opprettet.

Merk: Primær- og fremmednøklene på bordet er allerede indeksert av MySQL. Hver indeks har sitt eget unike navn, og kolonnen som den er definert på vises også.

Syntaks: Slipp indeks

Slippkommandoen brukes til å fjerne allerede definerte indekser på et bord.

Det kan være tider når du allerede har definert en indeks på en tabell som ofte oppdateres. Det kan være lurt å fjerne indeksene på en slik tabell for å forbedre ytelsen til UPDATE og INSERT. Den grunnleggende syntaksen som brukes til å slippe en indeks på et bord, er som følger.

DROP INDEX `index_id` ON `table_name`;

La oss nå se på et praktisk eksempel.

DROP INDEX ` full_names` ON `members_indexed`;

Når du utfører kommandoen ovenfor, slippes indeksen med id `fullnavn` fra tabellen members_indexed.

Sammendrag

  • Indekser er veldig kraftige når det gjelder å forbedre ytelsen til MySQL-søk.
  • Indekser kan defineres når du lager en tabell eller legges til senere etter at tabellen allerede er opprettet.
  • Du kan definere indekser i mer enn en kolonne i en tabell.
  • VIS INDEKS FRA tabellnavn brukes til å vise de definerte indeksene på en tabell.
  • DROP-kommandoen brukes til å fjerne en definert indeks på en gitt tabell.