Mikä on hakemisto?
MySQL: n hakemistot lajittelevat tietoja järjestetyssä järjestyksessä. Ne luodaan sarakkeisiin, joita käytetään tietojen suodattamiseen. Ajattele hakemistoa aakkosjärjestyksessä. Aakkosjärjestyksessä lajiteltujen nimien haku on helpompaa kuin lajittelemattomat nimet.
Hakemiston käyttäminen usein päivitetyissä taulukoissa voi johtaa heikkoon suorituskykyyn. Tämä johtuu siitä, että MySQL luo uuden hakemistolohkon aina, kun tietoja lisätään tai päivitetään taulukkoon. Yleensä hakemistoja tulisi käyttää taulukoissa, joiden tiedot eivät muutu usein, mutta joita käytetään paljon valituissa hakukyselyissä.
Mitä hakemistoa käytetään?
Kukaan ei pidä hitaista järjestelmistä. Korkea järjestelmän suorituskyky on ensisijaisen tärkeää melkein kaikissa tietokantajärjestelmissä. Suurin osa yrityksistä investoi paljon laitteistoihin, jotta tietojen nouto ja käsittely voi olla nopeampaa. Yrityksen tekemiin laitteistoinvestointeihin on kuitenkin raja. Tietokannan optimointi on halvempi ja parempi ratkaisu.
Vasteajan hitaus johtuu yleensä siitä, että tietueet tallennetaan satunnaisesti tietokantataulukoihin. Hakukyselyjen on etsittävä kaikki satunnaisesti tallennetut tietueet peräkkäin halutun datan löytämiseksi. Tämä johtaa huonoihin tietokantoihin, kun on kyse tietojen hakemisesta suurista taulukoista. Siksi hakemistoja käytetään lajittelemaan tietoja helpottamaan hakua.
Syntaksi: Luo hakemisto
Indeksit voidaan määrittää kahdella tavalla
- Pöydän luomisen aikaan
- Kun taulukko on luotu
Myflixdb: lle odotamme paljon hakuja koko nimen tietokantaan.
Lisäämme "full_names" -sarakkeen hakemistoon uudessa taulukossa "members_indexed".
Alla esitetty komentosarja auttaa meitä saavuttamaan sen.
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;
Suorita yllä oleva SQL-komentosarja MySQL-työpöydällä "myflixdb": tä vastaan.
Myflixdb: n päivittäminen näyttää äskettäin luodun taulukon nimeltä members_indexed.
"Huomaa" jäsenet_indeksoimattomalla taulukolla on "koko_nimet" hakemistosolmussa.
Kun jäsenkanta laajenee ja tietueiden määrä kasvaa, WHERE- ja ORDER BY -lausekkeita käyttävät members_indexed -taulukon hakukyselyt ovat paljon nopeampia verrattuna jäsentaulukon suorittamiin hakemistoihin ilman hakemistoa.
Lisää hakemiston perussyntaksi
Yllä oleva esimerkki loi indeksin määritettäessä tietokantataulukkoa. Oletetaan, että meillä on jo määritelty taulukko ja hakukyselyt ovat hyvin hitaita. Tulosten palauttaminen kestää liian kauan. Tutkittuamme ongelman havaitsemme, että voimme parantaa huomattavasti järjestelmän suorituskykyä luomalla INDEX WHERE-lausekkeen yleisimmin käytettyyn sarakkeeseen.
Voimme käyttää hakua lisäämällä hakemistoa
CREATE INDEX id_index ON table_name(column_name);
Oletetaan, että elokuvataulukon hakukyselyt ovat hyvin hitaita ja haluamme käyttää hakemistoa "elokuvan otsikossa" kyselyjen nopeuttamiseksi. Voimme käyttää seuraavaa komentosarjaa sen saavuttamiseksi.
CREATE INDEX `title_index` ON `movies`(`title`);
Yllä olevan kyselyn suorittaminen luo hakemiston elokuvataulukon otsikkokenttään.
Tämä tarkoittaa, että kaikki elokuvan taulukon "otsikkoa" käyttävät hakukyselyt ovat nopeampia.
Hakukyselyt muilla elokuvataulukon kentillä ovat kuitenkin hitaampia kuin indeksoituun kenttään perustuvat kyselyt.
Huomaa: Voit luoda hakemistoja tarvittaessa useisiin sarakkeisiin riippuen kentistä, joita aiot käyttää tietokannan hakukoneessa.
Jos haluat tarkastella tietyssä taulukossa määriteltyjä hakemistoja, voit tehdä sen seuraavalla komentosarjalla.
SHOW INDEXES FROM table_name;
Katsotaan nyt kaikkia indeksejä, jotka on määritetty myflixdb: n elokuvataulukossa.
SHOW INDEXES FROM `movies`;
Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä myflixdb: tä vastaan antaa meille tuloksia luotuista hakemistoista.
Huomautus: MySQL on jo indeksoinut taulukon ensisijaiset ja vieraat avaimet. Jokaisella hakemistolla on oma yksilöllinen nimi ja myös sarake, jolla se on määritelty, näytetään.
Syntaksi: Pudotusindeksi
Pudotuskomentoa käytetään jo määritettyjen hakemistojen poistamiseen taulukosta.
Joskus olet jo määrittänyt hakemiston taulukossa, jota päivitetään usein. Haluat ehkä poistaa hakemistot tällaisesta taulukosta UPDATE- ja INSERT-kyselyjen suorituskyvyn parantamiseksi. Hakemiston pudottamiseen taulukkoon käytetty perussyntaksi on seuraava.
DROP INDEX `index_id` ON `table_name`;
Katsotaanpa nyt käytännön esimerkkiä.
DROP INDEX ` full_names` ON `members_indexed`;
Yllä olevan komennon suorittaminen pudottaa hakemiston, jonka tunnus on "koko_nimet", taulusta members_indexed.
Yhteenveto
- Hakemistot ovat erittäin tehokkaita MySQL-hakukyselyjen suorituskyvyn parantamiseksi huomattavasti.
- Hakemistot voidaan määrittää taulukkoa luodessa tai lisätä myöhemmin, kun taulukko on jo luotu.
- Voit määrittää indeksit useammalle kuin yhdelle taulukon sarakkeelle.
- SHOW INDEX FROM taulukon_nimi käyttää määritettyjen hakemistojen näyttämistä taulukossa.
- DROP-komentoa käytetään poistamaan määritetty hakemisto annetusta taulukosta.