„MySQL Index“ pamoka - kurkite, pridėkite ir & Lašas

Turinys:

Anonim

Kas yra indeksas?

„MySQL“ rodyklės rūšiuoja duomenis organizuotai nuosekliai. Jie sukuriami stulpelyje (-iuose), kurie bus naudojami duomenims filtruoti. Pagalvokite apie indeksą kaip apie abėcėlės tvarka surūšiuotą sąrašą. Lengviau ieškoti vardų, kurie buvo surūšiuoti abėcėlės tvarka, nei tų, kurie nėra rūšiuojami.

Indekso naudojimas dažnai atnaujinamose lentelėse gali sukelti prastą našumą. Taip yra todėl, kad „MySQL“ sukuria naują indekso bloką kiekvieną kartą, kai duomenys pridedami arba atnaujinami lentelėje. Paprastai indeksai turėtų būti naudojami lentelėse, kurių duomenys dažnai nesikeičia, tačiau yra daug naudojami pasirinktose paieškos užklausose.

Ką naudoti indeksas?

Niekas nemėgsta lėtų sistemų. Didelis sistemos našumas yra nepaprastai svarbus beveik visose duomenų bazių sistemose. Daugelis verslo įmonių daug investuoja į aparatinę įrangą, kad būtų galima greičiau gauti duomenis ir manipuliuoti jais. Tačiau verslas gali investuoti į aparatinę įrangą. Duomenų bazės optimizavimas yra pigesnis ir geresnis sprendimas.

Reagavimo laiko lėtumą dažniausiai lemia tai, kad įrašai atsitiktinai saugomi duomenų bazės lentelėse. Paieškos užklausos turi surišti visus atsitiktinai saugomus įrašus vienas po kito, kad surastų norimus duomenis. Dėl to gaunamos prastos duomenų bazės, kai reikia gauti duomenis iš didelių lentelių. Taigi indeksai naudojami rūšiuojant duomenis, kad būtų lengviau ieškoti.

Sintaksė: sukurkite indeksą

Indeksus galima apibrėžti dviem būdais

  1. Stalo kūrimo metu
  2. Sukūrus lentelę
Pavyzdys:

Mūsų „myflixdb“ tikimės, kad duomenų bazėje bus atlikta daugybė vardų.

Stulpelį „full_names“ pridėsime prie indekso naujoje lentelėje „members_indexed“.

Žemiau pateiktas scenarijus padeda mums tai pasiekti.

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;

Vykdykite aukščiau nurodytą SQL scenarijų „MySQL“ darbastalyje prieš „myflixdb“.

Atnaujinant „myflixdb“ rodoma naujai sukurta lentelė pavadinimu members_indexed.

„Note“ nariai_indexed lentelėje indeksų mazge yra „full_names“.

Plečiantis narių bazei ir didėjant įrašų skaičiui, lentelės nariai_indexed paieškos užklausos, kuriose naudojamos sąlygos WHERE ir ORDER BY, bus daug greitesnės, palyginti su atliktomis narių lentelėje nenustatant indekso.

Pridėti pagrindinę indekso sintaksę

Aukščiau pateiktame pavyzdyje sukurtas indeksas apibrėžiant duomenų bazės lentelę. Tarkime, kad jau turime apibrėžtą lentelę, o paieškos užklausos joje yra labai lėtos. Jie per ilgai užtrunka, kol pateikia rezultatus. Ištyrę problemą, mes pastebime, kad galime žymiai pagerinti sistemos našumą kurdami INDEX dažniausiai naudojamame WHERE stulpelyje.

Norėdami pridėti indeksą, galime naudoti šią užklausą

CREATE INDEX id_index ON table_name(column_name);

Tarkime, kad filmų lentelėje paieškos užklausos yra labai lėtos ir norime paspartinti užklausas norėdami naudoti rodyklę „filmo pavadinime“. Norėdami tai pasiekti, galime naudoti šį scenarijų.

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

Vykdant pirmiau pateiktą užklausą, filmų lentelės pavadinimo lauke sukuriama rodyklė.

Tai reiškia, kad visos filmų lentelėje pateiktos paieškos užklausos naudojant pavadinimą bus greitesnės.

Paieškos užklausos kituose filmų lentelės laukuose vis tiek bus lėtesnės, palyginti su užklausomis pagal indeksuotą lauką.

Pastaba: jei reikia, galite sukurti indeksus keliuose stulpeliuose, atsižvelgiant į laukus, kuriuos ketinate naudoti savo duomenų bazės paieškos sistemai.

Jei norite peržiūrėti tam tikroje lentelėje apibrėžtus indeksus, galite tai padaryti naudodami šį scenarijų.

SHOW INDEXES FROM table_name;

Pažvelkime į visas rodykles, apibrėžtas „myflixdb“ filmų lentelėje.

SHOW INDEXES FROM `movies`;

Minėto scenarijaus vykdymas MySQL darbastalyje su „myflixdb“ suteikia mums sukurto indekso rezultatus.

Pastaba: pagrindinius ir svetimus raktus ant stalo jau indeksavo „MySQL“. Kiekvienas indeksas turi savo unikalų pavadinimą, taip pat rodomas stulpelis, kuriame jis apibrėžtas.

Sintaksė: kritimo indeksas

Komanda „drop“ naudojama pašalinti jau apibrėžtus indeksus lentelėje.

Kartais gali būti, kad jūs jau apibrėžėte indeksą lentelėje, kuri dažnai atnaujinama. Galite pagerinti tokios lentelės rodykles, kad pagerintumėte UPDATE ir INSERT užklausų našumą. Pagrindinė sintaksė, naudojama indeksui numesti į lentelę, yra tokia.

DROP INDEX `index_id` ON `table_name`;

Dabar pažvelkime į praktinį pavyzdį.

DROP INDEX ` full_names` ON `members_indexed`;

Vykdant aukščiau nurodytą komandą, lentelėje nariai_indeksas iškrenta indeksas su ID „visi_vardai“.

Santrauka

  • Indeksai yra labai galingi, kai reikia labai pagerinti „MySQL“ paieškos užklausų našumą.
  • Indeksus galima apibrėžti kuriant lentelę arba pridėti vėliau, kai lentelė jau bus sukurta.
  • Indeksus galite apibrėžti daugiau nei viename lentelės stulpelyje.
  • RODYTI RODYKLĄ IŠ lentelės_vardas naudojamas apibrėžtoms rodyklėms rodyti lentelėje.
  • DROP komanda naudojama pašalinti nurodytą lentelę nurodytoje lentelėje.