Mis on register?
MySQL-is olevad indeksid sorteerivad andmeid järjestatud järjestikuliselt. Need luuakse veerus (veergudel), mida kasutatakse andmete filtreerimiseks. Mõelge indeksist kui tähestiku järgi järjestatud loendist. Tähestikulises järjestuses olevaid nimesid on lihtsam otsida kui sorteerimata nimesid.
Indeksi kasutamine sageli värskendatavatel tabelitel võib põhjustada halva jõudluse. Seda seetõttu, et MySQL loob uue indeksiploki iga kord, kui andmed tabelisse lisatakse või värskendatakse. Üldiselt tuleks indekse kasutada tabelites, mille andmed ei muutu sageli, kuid mida kasutatakse valitud otsingupäringutes palju.
Mida kasutada indeksit?
Kellegile ei meeldi aeglased süsteemid. Kõrge süsteemi jõudlus on peamise tähtsusega peaaegu kõigis andmebaasisüsteemides. Enamik ettevõtteid investeerib palju riistvarasse, et andmete otsimine ja manipuleerimine saaks olla kiirem. Kuid ettevõtte riistvarainvesteeringutel on piir. Oma andmebaasi optimeerimine on odavam ja parem lahendus.
Reageerimisaja aeglus tuleneb tavaliselt sellest, et kirjed salvestatakse juhuslikult andmebaasi tabelitesse. Soovitud andmete leidmiseks peavad otsingupäringud üksteise järel läbi viima kõik juhuslikult salvestatud kirjed. Selle tulemuseks on kehva jõudlusega andmebaasid, kui tegemist on andmete hankimisega suurtest tabelitest. Seega kasutatakse indekse, mis sorteerivad andmeid, et hõlbustada otsimist.
Süntaks: loo register
Indekseid saab määratleda kahel viisil
- Laua loomise ajal
- Pärast tabeli loomist
Meie myflixdb jaoks ootame andmebaasi palju otsinguid täisnimega.
Lisame veeru "täisnimed" indeksisse uude tabelisse "members_indexed".
Allpool toodud 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-i töölaual "myflixdb" vastu.
Myflixdb värskendamine näitab äsja loodud tabelit nimega members_indexed.
Tabelis "Note" members_indexed on indeksite sõlmes "full_names".
Kui liikmete baas laieneb ja kirjete arv suureneb, on WH_ ja ORDER BY klausleid kasutavate tabeli members_indexed otsingupäringud palju kiiremad, võrreldes nendega, mis esitati liikmetabelis ilma indeksit määratlemata.
Lisage indeksi põhisüntaks
Ülaltoodud näide lõi andmebaasi tabeli määratlemisel indeksi. Oletame, et meil on tabel juba määratletud ja selles on otsingupäringud väga aeglased. Tulemuste tagastamine võtab liiga kaua aega. Pärast probleemi uurimist avastame, et saame süsteemi jõudlust oluliselt parandada, luues INDEXi WHERE klausli kõige sagedamini kasutatavasse veergu.
Indeksi lisamiseks saame kasutada järgmist päringut
CREATE INDEX id_index ON table_name(column_name);
Oletame, et filmitabeli otsingupäringud on väga aeglased ja soovime päringute kiirendamiseks kasutada indeksit filmi pealkirjas, selle saavutamiseks võime kasutada järgmist skripti.
CREATE INDEX `title_index` ON `movies`(`title`);
Ülaltoodud päringu täitmisel luuakse filmitabeli pealkirjaväljale register.
See tähendab, et kõik filmi tabeli otsingupäringud, mis kasutavad pealkirja, on kiiremad.
Filmitabeli muude väljade otsingupäringud on siiski aeglasemad kui indekseeritud väljal põhinevad.
Märkus. Sõltuvalt väljadest, mida kavatsete oma andmebaasi otsingumootori jaoks kasutada, saate vajadusel luua mitu veergu indeksit.
Kui soovite vaadata kindlas tabelis määratletud indekseid, võite selleks kasutada järgmist skripti.
SHOW INDEXES FROM table_name;
Vaatame nüüd kõiki myflixdb-s filmitabelis määratletud indekseid.
SHOW INDEXES FROM `movies`;
Ülaltoodud skripti käivitamine MySQL-i töölaual myflixdb-ga annab meile tulemusi loodud indeksi kohta.
Märkus: MySQL on tabelis olevad peamised ja võõrad võtmed juba indekseerinud. Igal indeksil on oma ainulaadne nimi ja kuvatakse ka veerg, millel see on määratletud.
Süntaks: langusindeks
Käsku tilk kasutatakse tabelis juba määratletud indeksite eemaldamiseks.
Võib juhtuda, et olete juba määranud tabelis sageli värskendatava registri. Võib-olla soovite sellelt tabelilt eemaldada indeksid, et parandada UPDATE ja INSERT päringute toimivust. Indeksi tabelisse viskamiseks kasutatav põhisüntaks 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 käivitamisel langeb tabelist liikmete_indeksid indeks id `täisnimed`.
Kokkuvõte
- Indeksid on väga võimsad, kui on vaja MySQL-i otsingupäringute jõudlust oluliselt parandada.
- Indeksid saab määratleda tabeli loomisel või lisada hiljem, kui tabel on juba loodud.
- Indeksid saate määratleda rohkem kui ühes tabeli veerus.
- SHOW INDEX FROM tabeli_nimi kasutatakse määratletud indeksite kuvamiseks tabelis.
- DROP-käsku kasutatakse määratud tabeli määratletud indeksi eemaldamiseks.