sql >> Database teknologi >  >> RDS >> Mysql

MySQL-ydelse:Sådan udnytter du MySQL-databaseindeksering

I løbet af denne øvelse vil vi dække nogle af de grundlæggende elementer i indeksering. Som en del af MySQL-serien vil vi introducere mulighederne for MySQL-indeksering og den rolle, det spiller i at optimere databasens ydeevne. Liquid Web anbefaler, at du rådfører dig med en DBA, før du foretager ændringer i din applikation på produktionsniveau.

Hvad er indeksering?

Indeksering er en kraftfuld struktur i MySQL, som kan udnyttes til at få de hurtigste svartider fra almindelige forespørgsler. MySQL-forespørgsler opnår effektivitet ved at generere en mindre tabel, kaldet et indeks, fra en specificeret kolonne eller et sæt af kolonner. Disse kolonner, kaldet en nøgle, kan bruges til at håndhæve unikhed. Nedenfor er en simpel visualisering af et eksempelindeks med to kolonner som nøgle.

+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+

Forespørgsler bruger indekser til at identificere og hente de målrettede data, selvom de er en kombination af nøgler. Uden et indeks resulterer kørsel af den samme forespørgsel i en inspektion af hver række for de nødvendige data. Indeksering producerer en genvej med meget hurtigere forespørgselstider på ekspansive tabeller. En lærebogsanalogi kan give en anden almindelig måde at visualisere, hvordan indekser fungerer på.

Hvornår skal indeksering aktiveres?

Indeksering er kun fordelagtigt for store tabeller med regelmæssig adgang til information. For at fortsætte med vores lærebogsanalogi giver det for eksempel ingen mening at indeksere en børnehistoriebog med kun et dusin sider. Det er mere effektivt blot at læse bogen for at finde hver forekomst af ordet "skildpadde", end det ville være at opsætte og vedligeholde indekser, forespørge efter disse indekser og derefter gennemgå hver side. I computerverdenen repræsenterer de ekstra opgaver omkring indeksering spildte ressourcer, som ville være bedre tilsigtet ved ikke at indeksere.

Uden indekser, når tabeller vokser til enorme proportioner, lider svartider af forespørgsler, der er rettet mod disse stumpe tabeller. Ineffektive forespørgsler viser sig i latens i applikationen eller webstedets ydeevne. Vi identificerer almindeligvis denne forsinkelse ved at bruge MySQL langsomme forespørgselslogfunktion. Du kan finde flere detaljer om brugen af ​​den langsomme forespørgselslogfunktion i den første artikel i denne serie:MySQL Performance:Identifying Long Queries.
Når en kolossal tabel rammer sit vendepunkt, når den potentialet for nedetid for applikationer og websteder . Udførelse af rutineevalueringer for at udvide databasen etablerer optimal databaseydeevne og omgår lange forespørgslers iboende afbrydelser.

MySQL-indeksering fordele vs. ulemper

Der er fordele og ulemper ved at bruge MySQL-indeksering, og vi vil diskutere de væsentlige fordele og ulemper til din overvejelse. Disse aspekter vil guide dig til at beslutte, om indeksering er et passende valg for din situation.

Hvilke oplysninger indekserer én?

At vælge, hvad der skal indekseres, er nok den mest udfordrende del af indeksering af dine databaser. Bestemmelse af, hvad der er vigtigt nok til at indeksere, og hvad der er godartet nok til ikke at indeksere. Generelt fungerer indeksering bedst på de kolonner, der er genstand for WHERE-sætningerne i dine almindeligt udførte forespørgsler. Overvej følgende forenklede tabel:

ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...

Hvis dine forespørgsler er afhængige af at teste WHERE-sætningen ved hjælp af LAST_NAME og FIRST_NAME, vil indeksering efter disse to kolonner øge forespørgslens svartider betydeligt. Alternativt, hvis dine forespørgsler er afhængige af et simpelt ID-opslag, ville indeksering efter ID være det bedre valg.

Disse eksempler er blot et rudimentært eksempel, og der er flere typer indekseringsstrukturer indbygget i MySQL. Den følgende MySQL-side diskuterer disse typer indekser mere detaljeret, og en anbefalet læsning for alle, der overvejer at indeksere:Hvordan MySQL bruger indekser

Hvad er et unikt indeks?

Et andet punkt til overvejelse, når du vurderer, hvilke kolonner der skal fungere som nøglen i dit indeks, er, om du skal bruge den UNIQUE-begrænsning. Indstilling af UNIQUE-begrænsningen vil gennemtvinge unikhed baseret på den konfigurerede indekseringsnøgle. Som med enhver nøgle kan dette være en enkelt kolonne eller en sammenkædning af flere kolonner. Funktionen af ​​denne begrænsning sikrer, at der ikke er nogen duplikerede poster i tabellen baseret på den konfigurerede nøgle.

Hvad er et primært nøgleindeks?

Så almindeligt påberåbt som den UNIKKE begrænsning, bruges den PRIMÆR NØGLE til at optimere indekser. Denne begrænsning sikrer, at den udpegede PRIMÆR NØGLE ikke kan have en nulværdi. Som følge heraf opstår der et ydelsesboost, når du kører på en InnoDB-lagringsmotor til den pågældende tabel. Dette boost skyldes, hvordan InnoDB fysisk lagrer data, og placerer rækker med nulværdi i nøglen uden for sammenhængende rækkefølge med rækker, der har værdier. Aktivering af denne begrænsning sikrer, at rækkerne i tabellen holdes i sammenhængende rækkefølge for hurtigere svar.

Håndtering af indekser

Nu vil vi dække nogle af det grundlæggende i at manipulere indekser ved hjælp af MySQL-syntaks. I eksempler vil vi inkludere oprettelse, sletning og liste over indekser. Husk, at disse eksempler har pladsholderindgange for de specifikke søgeord. Disse nøgleord er selvforklarende af natur, så de er nemme at læse, og nedenfor er en oversigt over dem.

Angivelse/visning af indekser

Tabeller kan have flere indekser. Håndtering af indekser vil uundgåeligt kræve at være i stand til at liste de eksisterende indekser på en tabel. Syntaksen for at se et indeks er nedenfor.

SHOW INDEX FROM tableName;

Oprettelse af indekser

Indeksoprettelse har en simpel syntaks. Vanskeligheden er at afgøre, hvilke kolonner der skal indekseres, og om det er nødvendigt at håndhæve unikhed. Nedenfor vil vi illustrere, hvordan man opretter indekser med og uden en PRIMÆR NØGLE og UNIKKE begrænsninger.

Som tidligere nævnt kan tabeller have flere indekser. Multipel indeksering er nyttig til at oprette indekser, der er tilpasset de forespørgsler, der kræves af din applikation eller dit websted. Standardindstillingerne tillader op til 16 indekser pr. tabel, øg dette tal, men er generelt mere end nødvendigt. Indekser kan oprettes under oprettelsen af ​​en tabel eller tilføjes til tabellen som yderligere indekser senere. Vi vil gennemgå begge metoder nedenfor.

Eksempel:Opret en tabel med et standardindeks

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);

Eksempel:Opret en tabel med unikt indeks og primær nøgle

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);

Eksempel:Tilføj et indeks til eksisterende tabel

CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);

Eksempel:Tilføj et indeks til eksisterende tabel med primærnøgle

CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);

Sletning af indekser

Mens du administrerer indekser, kan du finde det nødvendigt at fjerne nogle. Sletning af indekser er også en meget enkel proces, se eksemplet nedenfor:

DROP INDEX indexName ON tableName;

Der er mange måder at optimere din database til ægte effektivitet. Hvis du gerne vil vide mere eller konvertere de søgemaskinetyper, der er tilgængelige i MySQL, læs vores MyISAM vs. InnoDB tutorial. Eller hvis du har brug for velfungerende databaser, tjek vores MySQL-produktside for at se forskellige muligheder.

Serienavigation<>

  1. ListView Kontrol Træk-Drop Sorter begivenheder

  2. Sådan dræber du en kørende SELECT-sætning

  3. Sådan aktiveres komprimering på en eksisterende tabel i SQL Server (T-SQL)

  4. SQL-visninger