MySQL Indeksi õpetus – looge, lisage ja kukutage

Mis on register?

Indeksid sisse MySQL sortida andmeid organiseeritud järjestikusel viisil. Need luuakse veergu(de)s, mida kasutatakse andmete filtreerimiseks. Mõelge registrist kui tähestikulises järjekorras sorteeritud loendist. Lihtsam on otsida nimesid, mis on sorteeritud tähestiku järjekorras, kui neid, mida pole sorteeritud.

Indeksi kasutamine tabelites, mida sageli värskendatakse, võib põhjustada halva jõudluse. Seda seetõttu, et MySQL loob uue registriploki iga kord, kui andmeid tabelisse lisatakse või värskendatakse. Üldiselt tuleks indekseid kasutada tabelites, mille andmed ei muutu sageli, kuid mida kasutatakse palju valitud otsingupäringutes.

Milleks indeksit kasutada?

Kellelegi ei meeldi aeglased süsteemid. Süsteemi kõrge jõudlus on peaaegu kõigis andmebaasisüsteemides esmatähtis. Enamik ettevõtteid investeerib palju riistvarasse, et andmete otsimine ja manipuleerimine oleks kiirem. Kuid ettevõtte riistvarainvesteeringutel on piir. Andmebaasi optimeerimine on odavam ja parem lahendus.

MySQL indeks

Reageerimisaja aeglus on tavaliselt tingitud sellest, et kirjed salvestatakse juhuslikult andmebaasi tabelitesse. Otsingupäringud peavad soovitud andmete leidmiseks üksteise järel läbima kõik juhuslikult salvestatud kirjed. Selle tulemuseks on andmebaaside halva jõudlusega andmete hankimine suurtest tabelitest. Seetõttu kasutatakse indekseid, mis sortivad andmeid otsimise hõlbustamiseks.

Süntaks: Loo indeks

Indekseid saab määratleda kahel viisil

  1. Tabeli loomise ajal
  2. Pärast tabeli loomist

Näide:

Meie myflixdb jaoks ootame palju täisnimega otsinguid.

Lisame veeru "full_names" uude tabelisse "members_indexed" indeksisse.

Allpool näidatud skript aitab meil seda saavutada.

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;

Käivitage ülaltoodud SQL-skript MySQL töölaud "myflixdb" vastu.

MySQL Loo indeks

Myflixdb värskendamisel kuvatakse äsja loodud tabel, mille nimi on Members_indexed.

"Märge" tabelis Members_indexed on indeksite sõlmes "täisnimed".

Liikmete baasi laienedes ja kirjete arvu suurenedes on tabelis Members_indexed olevad otsingupäringud, mis kasutavad klausleid WHERE ja ORDER BY, palju kiiremad võrreldes päringutega, mida esitatakse liikmete tabelis ilma indeksita.

Lisage indeksi põhisüntaks

Ülaltoodud näide lõi indeksi andmebaasitabeli määratlemisel. Oletame, et meil on tabel juba määratletud ja otsingupäringud selles on väga aeglased. Tulemuste tagastamine võtab liiga kaua aega. Pärast probleemi uurimist avastame, et saame süsteemi jõudlust oluliselt parandada, luues WHERE-klausli kõige sagedamini kasutatavasse veergu INDEX.

Indeksi lisamiseks saame kasutada järgmist päringut

CREATE INDEX id_index ON table_name(column_name);

Oletame, et otsingupäringud filmide tabelis on väga aeglased ja me tahame päringute kiirendamiseks kasutada "filmi pealkirja" indeksit, saame selle saavutamiseks kasutada järgmist skripti.

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

Ülaltoodud päringu täitmine loob filmide tabeli pealkirjaväljale indeksi.

See tähendab, et kõik "pealkirja" kasutavate filmide tabelis olevad otsingupäringud on kiiremad.

Filmide tabeli muude väljade otsingupäringud on siiski aeglasemad kui indekseeritud väljal põhinevad päringud.

Märge: Vajadusel saate luua indekseid mitmele veerule olenevalt väljadest, mida kavatsete oma andmebaasi otsingumootori jaoks kasutada.

Kui soovite vaadata konkreetses tabelis määratletud indekseid, saate selleks kasutada järgmist skripti.

SHOW INDEXES FROM table_name;

Vaatame nüüd kõiki faile myflixdb filmide tabelis määratletud indekseid.

SHOW INDEXES FROM `movies`;

Ülaltoodud skripti käivitamine MySQL töölaud vastu myflixdb annab meile tulemusi loodud indeksi kohta.

Märge: Tabeli primaar- ja võõrvõtmed on juba indekseeritud MySQL. Igal indeksil on oma kordumatu nimi ja kuvatakse ka veerg, millel see on määratletud.

Süntaks: langusindeks

Drop-käsku kasutatakse tabelist juba määratletud indeksite eemaldamiseks.

Võib juhtuda, et olete sageli uuendatavas tabelis juba indeksi määranud. Päringute UPDATE ja INSERT toimivuse parandamiseks võiksite sellisest tabelist indeksid eemaldada. Põhiline süntaks, mida kasutatakse indeksi langetamiseks tabelisse, on järgmine.

DROP INDEX `index_id` ON `table_name`;

Vaatame nüüd praktilist näidet.

DROP INDEX ` full_names` ON `members_indexed`;

Ülaltoodud käsu täitmine kukub tabelist Members_indexed indeks ID-ga "täisnimed".

kokkuvõte

  • Indeksid on väga võimsad, kui on vaja jõudlust oluliselt parandada MySQL otsingupäringud.
  • Indekseid saab määrata tabeli loomisel või lisada hiljem, kui tabel on juba loodud.
  • Saate määratleda indekseid rohkem kui ühes tabeli veerus.
  • SHOW INDEX FROM tabeli_nimi kasutatakse määratletud indeksite kuvamiseks tabelis.
  • DROP-käsku kasutatakse määratletud indeksi eemaldamiseks antud tabelist.