Software company albania
Header

MySQL Indexing

May 21st, 2012 | Posted by Eriketa Sinanaj in MySQL

Ju ka ndodhur ndonjëherë të vini re një vonesë në kryerjen e veprimeve gjatë përdorimit të aplikimit tuaj me bazë të dhënash MySQL? Me siguri keni menduar se kjo vonesë mund të vijë nga fakti se baza e të dhënave të aplikimit tuaj është tashmë mjaft e madhe. Por çdo të ndodhë në të ardhmen, kur dihet se kjo bazë të dhënash do të rritet çdo ditë? Për të rritur performancën e aplikimit tuaj, përdorni në bazen tuaj të të dhënave Indekset.

Indeksi i një baze të dhënash është një strukturë të dhënash që rrit shpejtësinë e veprimeve në një tabelë. Indekset mund të krjohen duke përdorur një ose më shumë kolona, duke mundësuar si kërkimin e shpejtë të të dhënave ashtu edhe renditjen efiçente të tyre. Gjatë krijimit të indekseve duhet të përcaktohen qartë kolonat që do të përdoren për krijimin dhe ekzekutimin e SQL Query-ve të ndryshme për t’i krijuar indekset pikërisht mbi këto kolona.

Praktikisht, Indekset janë gjithashtu lloje tabelash që mbajnë çelësin primar (primary key) apo fushën Indeks dhe një shenjues (pointer) në çdo të dhënë të tabelës.

Përdoruesit nuk mund t’i shohin Indekset, ato shërbejnë vetëm për të përshpejtuar procesin e kërkimit dhe filtrimit të të dhënave dhe përdoren nga Database Search Engine për të gjetur të dhënat sa më shpejtë. Megjithatë, duhet patur kujdes në krijimin e Indekseve pasi efikasiteti I tyre nuk varet nga numri por nga rëndësia që kanë në tabelat ku krijohen.

Ja disa këshilla që duhen patur parasysh për të krijuar indekse sa më të vlefshme në bazën tuaj të të dhënave:

– Deklaroni një kolonë të indeksuar Not Null nëse është e mundur.

Megjithëse vlerat Null mund të indeksohen, Null mbetet një vlerë e veçantë që kërkon vendime shtesë gjatë  procesit të krahasimit sipas vlerave çelës (key values). Një Indeks pa vlera Null mund të procesohet më thjeshtë dhe më shpejtë.

- Shmangni numrin e madh të indekseve

Mos indeksoni një kolonë vetëm sepse mund ta bëni. Nëse ju nuk i referoheni asnjëherë një kolone gjatë krahasimeve (si Where, Order By apo Group By), atëherë nuk është e nevojshme që kjo kolonë të indeksohet.

– Një indeks në një kolonë që ka shumellojshmëri vlerash të ndryshme nuk është shumë efikas.

– Optimizoni tabelat për të kompaktësuar dhe renditur Indekset.

– Indeksoni prefiksin e një kolone në vend të të gjithë kolonës.

P.sh.: Në një bazë të dhënash ‘kinematografi’, në kolonën ‘title’ të tabelës ‘film’ krijojmë një indeks ‘idx_film_title’. Sipas sintaksës klasike krijimi i këtij indeksi do të bëhej në këtë mënyrë:

CREATE INDEX idx_film_title ON kinematografi.film(title);

Ky indeks i referohet të gjithë kolonës ‘title’. Ju, duke njohur mirë llojin e të dhënave që mund të vendosen në këtë kolonë, edhe pse cilesitë e saj lejojnë edhe string-e deri në 255 karaktere(CHAR), mund të parashikoni që nuk mund të ketë ndonje titull filmi të gjatë 255 karaktere. Prandaj, MySQL lejon vendosjen e prefikseve për të bërë të mundur kapjen dhe indeksimin vetëm të një pjese të të dhënave të kolonës ‘title’. Kjo kursen mjaft hapësirë në memorie ashtu edhe në kohën e ekzekutimit të query-së. Në këtë rast mund të përdorim një prefix që e limiton kolonën ‘title’ vetëm në 30 karakteret e para:

CREATE INDEX idx_film_title_short ON kinematografi.film(title(30));

– Nëse është e mundur përdorni Index Merge në vend të Composite Index

Index Merge është një metodë që përdoret për të kapur të dhëna në kolona të ndryshme dhe për t’i bashkuar rezultatet e tyre në një. Kjo metodë bashkon rezultatet e të njëjtës tabelë dhe jo të tabelave të ndryshme.

CREATE TABLE `t_idxmerge` (
  `i` int(11) NOT NULL,
  `j` int(11) NOT NULL,
  `val` char(10) NOT NULL,
  KEY `i` (`i`),
  KEY `j` (`j`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Composite Index është një Indeks i cili në fakt shërben si disa indekse pikërisht për faktin që ai është i përbërë. Kur duam që me anë të nje query t’i referohemi dy ose më shumë kolonave, atëherë Composite Index do të ishte instrumenti i duhur:

CREATE TABLE `t_idxcomposite` (
  `i` int(11) NOT NULL,
  `j` int(11) NOT NULL,
  `val` char(10) NOT NULL,
  KEY `i` (`i`,`j`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Të dy metodat kanë avantazhet dhe disavantazhet e tyre. Ndërsa Composite Index lehtëson punën duke iu referuar më shumë kolonave njëkohësisht, Index Merge na siguron një performancë më të lartë dhe është e përdorshme në query-të me kusht OR gjë që nuk mundësohet nga Composite Index.

 

Mos harroni të përdorni Indeksimin e tabelave dhe t’i përmbaheni këshillave të dhëna më sipër për të ndihmuar dhe perfeksionuar performancën e aplikimeve tuaja me bazë të dhënash MySQL.

You can follow any responses to this entry through the RSS 2.0 You can skip to the end and leave a response. Pinging is currently not allowed.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current ye@r *