26
RĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte Lietišķo datorsistēmu institūts MySQL Izstrādāja: Rita Burbo Jānis Raubiško 2012.gada

MySQL - Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

Embed Size (px)

Citation preview

Page 1: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

RĪGAS TEHNISKĀ UNIVERSITĀTEDatorzinātnes un informācijas tehnoloģijas fakultāte

Lietišķo datorsistēmu institūts

MySQL

Izstrādāja: Rita BurboJānis Raubiško

2012.gada

Page 2: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

Saturs

1. MySQL......................................................................................................................3

2. Vaicājumi...................................................................................................................4

1.1. Apvienošanas vaicājumi.....................................................................................5

1.2. Apvienošanas un statistikas vaicājumi...............................................................9

1.3. Pivot tabulu vaicājumi......................................................................................10

1.4. Datu salīdzināšanas vaicājumi..........................................................................11

1.5. Datumu un laiku vaicājums..............................................................................12

1.6. Frekvences vaicājumi.......................................................................................13

1.7. Sfērisko ģeometriju vaicājumi.........................................................................13

3. MySQL Optimizācija..............................................................................................15

3.1. Vienkārši veidi kā optimizēt vaicājumus.........................................................17

4. Secinājumi...............................................................................................................20

Literatūras saraksts........................................................................................................................21

Page 3: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

1. MySQL

MySQL ir relāciju datubāzu vadības sistēma (DBVS). MySQL izstrādā Zviedrijas

uzņēmums MySQL AB, kuru 2008. gadā pārņēmaSunMicrosystems.MySQL ir risinājums

mazām un vidējām lietojumprogrammām. Tas ir iekļauts WAMP, AppServ, LAMP serveros un

pārnēsājamos serveros - Denver, XAMPP. Parasti MySQL tiek izmantots kā serveris, pie kura

vēršas vietējie (lokālie) vai attālinātie klienti, tas sevī ietver iekšējā servera bibliotēku, kas ļauj

MySQL iekļaut autonomās programmās.

1.att. MySQL emblēma

Elastība, ko nodrošina MySQL datubāze, tiek panākta ar daudzu tabulu veidu atbalstu:

lietotāji var izvēlēties MyISAM tipa tabulas, kas atbalsta pilnu teksta meklēšanu, vai InnoDB

tipa tabulas, kas atbalsta transakcijas atsevišķu ierakstu līmenī. Turklāt, MySQL datu bāzē ir

integrētas īpaša veida EXAMPLE tabulas, kas ilustrē jaunu tabulu izveidošanas principus.

Pateicoties tās atvērtajai arhitektūrai un GPL licencēm, MySQL regulāri parādās jauna veida

tabulas.

MySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp,

Perl, PHP, PureBasic, Python, Ruby, Smalltalk, ComponentPascal, un Tcl bibliotēkas

priekš .NET platformu valodā, kā arī ODBC atbalsts, izmantojot MyODBC dziņus.

Page 4: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

2. Vaicājumi

Vaicājums ir lietotāja vēršanās pie datu bāzes, lai iegūtu nepieciešamo informāciju.

Visbiežākā operācija SQL ir vaicājums, ko veic ar deklaratīvo paziņojumu SELECT. SELECT

atgriež datus no vienas vai vairākām tabulām vai vienādībām. Standarta SELECT

pieprasījumiem nav ilgstošu seku uz datubāzi, bet tās var būt izmantojot nestandarta SELECT

paveidus, piemēram, SELECT INTO.

Vaicājumi atļauj lietotājam aprakstīt vēlamos datus, atstājot datu bāzu vadības sistēmu

(database management system (DBMS)) atbildīgu par plānošanu, optimizēšanu, un fizisko

darbību veikšanu, kas ir nepieciešams, lai saņemtu rezultātu.

Vaicājums ietver sarakstu ar kolonnām, kas būs ietvertas rezultātā tūlīt pēc SELECT

atslēgvārda. "Zvaigznīte" ("*"), var tikt lietota lai norādītu, ka vaicājumam jāatgriež visas

kolonnas vaicātajās tabulās. SELECT ir vissarežģītākais priekšraksts SQL valodā, ar izvēles

atslēgvārdiem un nosacījumiem, kas ietver:

Nosacījums FROM - norāda tabulu/tabulas no kuras dati jāiegūst. Nosacījums

FROM var iekļaut izvēles apakš nosacījumu JOIN, lai precizētu noteikumus

tabulu savienošanai.

Nosacījums WHERE - ietver salīdzinājuma predikātu, kas ierobežo atgrieztās

rindas no vaicājuma. Nosacījums WHERE likvidē visas rindas no rezultātu

kopas, kuras salīdzinājuma predikāts nenovērtē, kā "Patiesas" ("True").

Nosacījums GROUP BY - tiek bieži lietots kopā ar SQL apkopšanas funkcijām,

vai arī lai atbrīvotos no dublētām rindām rezultātu kopā. Nosacījums WHERE

tiek piemērots pirms nosacījuma GROUP BY.

Nosacījums HAVING - ietver predikātu, kas tiek lietots lai filtrētu rindas, kas

izriet no nosacījuma GROUP BY. Tāpēc, ka tas darbojas uz nosacījuma GROUP

BY rezultātiem, apkopšanas funkcijas var tikt lietotas izmantojot nosacījuma

HAVING predikātu.

Nosacījums ORDER BY - identificē kuras kolonnas tiek lietotas lai sakārtotu

iegūtos datus, un kurā virzienā tie būtu jākārto (augošā vai dilstošā secībā). Bez

ORDER BY nosacījuma, rindu secība kuru atgriež SQL vaicājums ir nenoteikts.

SQL vaicājumus var iedalīt 4 daļās:

Datu manipulēšanas vaicājumi (SELECT, INSERT, UPDATE, DELETE,

MERGE)

Datu definēšanas vaicājumi (CREATE, DROP, TRUNCATE, ALTER)

Datu kontroles vaicājumi (GRANT, REVOKE)

Page 5: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

Transakciju kontroles vaicājumi (BEGIN WORK vai START TRANSACTION,

COMMIT, ROLLBACK).

1.1. Select iespējasSELECT [ALL | DISTINCT | DISTINCTROW] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]

MySql atbalsta visas standarta Select vaicājuma iespējas. Kā papildiespējas tiek

piedāvātas SQL_BUFFER_RESULT, SQL_CALC_FOUND_ROWS (neiesaka izmantot

veiktspējas pasliktināšanās dēļ)

1.1.Apvienošanas vaicājumi

Visbiežāk pielieto tieši šāda veida vaicājums, lai veiktu datu grupēšanu. Pārsvara ar

šādiem vaicājumiem parāda mazāko, lielāko, summu, vidējo vai kādu citu statistisko vērtību, kas

atrodas kolonnās.

Vaicājums izskatās aptuveni šādi:

SELECT class, MIN(bar) AS bar

FROM tabula

GROUP BY class

Zemāk redzamajā piemēra ir redzams, ka pielietot vaicājumos group_concat, lai varētu

sagrupēt datus ņemot vēra to id.

Page 6: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

2.att. Vienkāršs sagrupēšanas vaicājums

Izmantojot šādu vaicājumu var izgūt ne tikai vienas tabulas kopsavilkumu. Var apvienot

vairākas tabulās un izgūt kopīgus datus grupējot kolonas.

Page 7: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

3.att. Vaicājums ar vairākām tabulām

Apvienošanas vaicājumi ir iespējams sadalīt daudzos apakš tipos, lai vieglāk varētu

orientēties un atrast vispiemērotāko vaicājumu datu atlasīšanai.

Apakš tipu nosaukumi ir atkarīgi no tā, kāda veida tiek izgūti dati. Piemēra, kas tika

aplūkots 4.att. dati ir izgūti izmantojot apvienošanas vaicājumi, kas iet pāri kolonām.

Page 8: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

4.att. Apvienojošais vaicājums: diagonāli kolonamVar izgūt datus arī no vairākām tabulām apvienojot tos un pēc tām izmantojot

iepriekšējo veidu izgūt vajadzīgo informāciju. Zemāk redzamajā piemēra ir 1 galvenā un 2 apakš

tabulas. Vaicājums ļauj galvenajai tabulai apvienot datus no apakš tabulām.

5.att. Vaicājums, lai izgūtu datus no vairākām tabulām

Page 9: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

Izmantojot apvienošanas vaicājumu ir iespējams izgūt datus no ļoti sarežģītām tabulām.

Mūsdienas bieži vien var sastapt tabulās, kuras izgūst datus no citas tabulas un tā var izgūt no

citas tabulas datus, tā veidojot tabulu virteni. Lai izgūtu no tādam tabulām datus izmanto

ūdenskrituma (kaskādes) apvienošanas vaicājumu.

6.att. Kaskādes vaicājuma pielietošana

Lai izgūtu datus no tabulām var izmantot arī group_concat un count funkcijās, lai varētu

iegūt unikālu ierakstu skaitu.

Page 10: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

7.att. Group_concat pielietošana

1.2.Apvienošanas un statistikas vaicājumi

Šajā sadaļa tika apskatīta tikai korelācijas vaicājums. Korelācija ir statiskais radītājs

vērtībām, kuras nav nejaušas un šīs vērtības ir lineāri saistītas starp pāriem, kas atrodas datu

kopās. Tas tiek apzīmēts ar r, un tās svārstās no -1 līdz +1, kur -1 liecina par perfektu apgriezto

korelāciju (regresijas līnija iet uz leju no kreisās uz labo), 0 norāda to ka korelācijas nav (nav

regresijas līnijas), un1norādaperfektutiešukorelāciju (regresijas līnija iet uz augšu kreisās

uzlabo).

Izstrādājot tabulu tiek uzskatīts kā x ir augstums un y ir mērījumu vērtība un tiek

meklēta korelācija starp to vērtībām. Eksistē vairākas korelācijas formulas, bet viena no

populārākajām ir Pearsona, kurā tiek pielietota šajā gadījumā.

Page 11: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

8.att. Korelācijas vaicājums

1.3.Pivot tabulu vaicājumi

Pēc idejas vaicājums izskatās šādi:

SELECT class, GROUP_CONCAT(member)

FROM tabulas

GROUP BY class;

Šīs vienkāršais vaicājums jau daļēji atgādina hibrīdu, kas daļēji ir līdzīgs gan CUBE,

gan EAV (entity attribute value).

Page 12: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

9.att. Pivot tabulas vaicājums

1.4.Datu salīdzināšanas vaicājumi

Šis vaicājums izmanto Unions, lai saskaņotu kolonnu nosaukumus no divām tabulām,

un tur rindas ar nesaskaņotiem datiem. Pielāgojot kolonu sarakstu{id, col1, col2, col3...} kā

vēlamo, bet parasti lietotājs vēlas, lai sāktu ar primāro atslēgu:

10.att. Salīdzināšanas vaicājuma shēma

Zemāk ir redzams, ka izmantot šādu vaicājumu salīdzinot 2 tabulu datus (11.att.).

Page 13: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

11.att. Datu salīdzināšanas vaicājuma piemērs

1.5.Datumu un laiku vaicājums

Šie vaicājumu izvada datumus un laikus. Tie var būt dati kas saistīti ar datubāzēm,

tabulām, datoru, vai veikt atskaiti, utt.

12.att Datumu vaicājums datoram

Page 14: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

13.att. Dienu skaitīšanai

1.6.Frekvences vaicājumi

Visbiežāk vaicājums shēmas ir šādas:

SELECT id

FROM tabula

GROUP BY id

HAVING COUNT(*) = N;

vai

SELECT a.*

FROM tbl a

JOIN tbl b ON a.id = b.id AND MOD(b.id, N ) = 0;

1.7. Sfērisko ģeometriju vaicājumi

Atrast attālumu starp diviem punktiem uz Zemes virsmas ir viena no problēmām, kuru

iespējams risināt izmantojot MySQL funkcijas. Lai atrisinātu šo uzdevumu ir jāzina pirmās

kārtas tuvināšana, jāignorē novirzes no Zemes virsmas. Tad attālums radiānos apstrādāts ar

vairākām trigonometriskām formulām.

Page 15: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana
Page 16: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

3. MySQLOptimizācija

Optimizēšana ir nepieciešama, lai varētu veikt vairāk darbu izmantojot mazāk resursu.

Tās ir aktuāli, kad datu daudzums pieaug un veiktspēja samazinās.

Vienkāršas lietas, kas jāzina, lai nezaudētu MySQL veiktspēju:

Datubāzes dizaina pareiza izstrāde:

o Pareizu kolonu parametru izvēle:

Atbilstošs izmērs (lai pietiktu un nebūtu neadekvāta rezerves);

Piemērotu kolonu tipa izvēle;

Notnull pielietošana;

Pielietot noteiktu kolonas izmēru (MyISAM tabulas ar noteiktu

rindu izmēru ir ātrākas; laiksakritību uzlabošana);

Krātuvju datu saspiešana, kur tās ir iespējams;

o Pareizu tabulas tipa izvēle:

Pareiza modeļa izvēle (tabulām (MyISAM), rindām (InnoDB),

lapām (BDB));

Transakciju nepieciešamība;

Ārējo atslēgu ierobežošana;

Vai ierakstu zaudēšana ir iespējama problēmu gadījumā;

Pareizo MySQL tabulu tipa izvēle;

o MyISAM tabulā

Kompakta krātuve;

Nav transakciju;

Tabulas noslēgtas;

Variācijas: Saspiestā, RAID, Saplūdināšanas;

o Saspiesta MyISAM tabulā:

Tikai lasīšanai;

Piemērots priekš CD-ROM un arhīviem;

o MyISAM RAID tabulā:

Pārtraukums 2 GB/4GB/jebkur pie šķēršļa;

o MyISAM sapludināta tabulā:

Daudz fizisku identisku MyISAM tabulu;

Var apstrādāt kā 1 tabulu;

Pareiza pielietošana:

o Nesaglābāt nevajadzīgus datus:

Page 17: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

Saspiest tos;

Izdzēst tos;

o Nesaglabāt datus no var aprēķināt;

o Nepieprasīt izvadīt tos datus, kas nav nepieciešami (Select* From…);

o Pielietot MySQL attīstības iespējas priekš ātruma:

REPLACE vaicājumi;

Multi-table dzēšana;

o Neizmantot nevajadzīgus vaicājumus:

o Pielietot transakcijas:

Novērš datu zaudēšanu;

Serveris samazina nejaušos I/O;

Veiktspēja un drošums palielinās;

o Īsas primāras atslēgas priekš InnoDB;

o Web apps

Pielietot starpprogrammatūru, lai abstrahēt datubāzi

Neglabāt visu datubāze (piemēram, attēlus var izvietot failu

sistēma);

o Ātru vaicājumu pielietošana:

Pielietot indeksus;

Pielietot ExplainSelect;

Vienkārši;

UNIONs;

Komplekti Insert;

Izprast kā vaicājums darbojas, lai izvairītos no nevajadzīgam

darbībām;

o ExplainSelect:

Pasaka ko MySQL domā;

Pasaka kuru atslēgu (indeksu) var izmantot;

Pasaka kuru atslēgu izmantos;

Pasaka cik rindu tiks pārbaudītas (aptuveni);

Page 18: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

14.att. ExplainSelect Jauninājumu pielietošana

o It īpaši jāpārbauda jauninājumi vaicājumiem, kuri ir sarežģīti un nedroši;

3.1.Vienkārši veidi kā optimizēt vaicājumus

Visbiežāk izceļ 3 veidus kā var optimizēt vaicājumus.

1. Pielietojot indeksus.

MySQL ļauj indeksēt datubāzes tabulās, kas ļauj ātri meklēt ierakstus neveicot pilnu

tabulas skenēšanu un tādējādi ievērojami paātrinot vaicājumu izpildi. Iespējams izveidot līdz 16

indeksiem uz tabulu, un MySQL atbalsta arī vairāku kolonnu indeksus un pilna teksta

meklēšanas indeksu.

CREATE INDEX idx_username ON users(username);

SHOW INDEX FROM users;

--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

| Table | Non_unique | Key_name     | Seq_in_index | Column_name | Collation | Cardinality |

Sub_part | Packed | Null | Index_type | Comment |

--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

| users |          1 | idx_username |            1 | username    | A         |      NULL |     NULL | NULL   |

YES  | BTREE      |         |

--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

1 rowinset (0.00 sec)

Jāņem vēra, ka indeksu pielietošana ne vienmēr padara darbu vieglāku. Indeksēt katru

tabulas lauku parasti nav vajadzības, jo tas palēnina MySQL vienmēr, kad tiek ievietoti vai

atjaunoti dati, jo MySQL veic papildus darbu, lai atjaunotu indeksus katru reizi. Tādējādi

vienmēr jāmeklē kompromisus, lai izstrādājot indeksēšanas sistēmu, tā palīdzētu lietotājam veikt

darbu.

Page 19: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

2. Optimizēt vaicājumu veiktspēju;

Analizējot vaicājuma veiktspēju ir lietderīgi izmantot EXPLAIN atslēgvārdu. Šis

atslēgvārds, novietots pirms Select vaicājumam, apraksta, kā MySQL plāno izpildīt vaicājumu

un rindu skaitu, ko būs nepieciešams apstrādāt, lai sekmīgi sasniegtu rezultātu kopu.

EXPLAIN SELECT city.name, city.district FROM city, country WHERE city.countrycode

= country.code AND country.code = 'IND';

+----+-------------+---------+-------+---------------+---------+---------+-------+------+-------------+

| id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows | Extra       |

+----+-------------+---------+-------+---------------+---------+---------+-------+------+-------------+

|  1 | SIMPLE      | country | const | PRIMARY       | PRIMARY | 3       | const |    1 | Usingindex |

|  1 | SIMPLE      | city    | ALL   | NULL          | NULL    | NULL    | NULL | 4079 | Usingwhere |

+----+-------------+---------+-------+---------------+---------+---------+-------+------+-------------+

2 rowsinset (0.00 sec)

3. Pielāgot iekšējos mainīgos;

MySQL ir tik atvērta, ka to noklusētos iestatījumus ir diezgan viegli mainīt, lai iegūtu

sev piemērotāku MySQL. Daži no galvenajiem mainīgajiem, kuru vajadzētu optimizēt, ir

uzskaitīti zemāk.

AlteringIndexBufferSize (key_buffer);

Šis mainīgais kontrolē bufera lielumu, ko izmanto tabulu indeksi (lasīšanas un

rakstīšanas operācijām). MySQL rokasgrāmata iesaka šo mainīgo palielināt "tik cik jūs varat

atļauties", lai nodrošinātu vislabāko veiktspēju indeksētām tabulām, un ieteicama vērtība ir

līdzvērtīga aptuveni 25 procentiem no kopējā sistēmas atmiņas apjoma. Šis ir viens no

svarīgākajiem MySQL konfigurācijas mainīgajiem.

AlteringTableBufferSize (read_buffer_size);

Kad vaicājums pieprasa, lai tabula tiktu skenēta secīgi, MySQL piešķir atmiņas buferi

šim vaicājumam. Read_buffer_size mainīgais kontrolē šī bufera lielumu. Ja jūs konstatējat, ka

secīga skenēšana norit lēni, jūs varat uzlabot veiktspēju, palielinot šo vērtību, un līdz ar to arī

bufera atmiņas izmēru.

SettingTheNumberOfMaximumOpenTables (table_cache)

Šis mainīgais kontrolē maksimālo tabulu skaitu MySQL, kas varbūt atvērtas jebkurā

laikā. Tādējādi kontrolē servera spēju reaģēt uz ienākošajiem pieprasījumiem. Šis mainīgais ir

cieši saistīts ar max_connections mainīgajiem. Šīs vērtības palielināšana ļauj MySQL uzturēt

lielāku atvērto tabulu skaitu, palielino tmax_connections palielinās atļauto pieslēgumu skaits.

Deciding A TimeLimitForLongQueries (long_query_time)

Page 20: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

MySQL ir tā saukto "slow query log", kas automātiski reģistrē visus vaicājumus, kuri

netika izpildīti noteiktā termiņā. Žurnāls ir noderīgs, lai izsekotu vaicājumus, kuri ir neefektīvi.

Dažas MySQL oprimizēšanas triki:

Pielietojot SQL_CALC_ROWS un FOUND_ROWS() (nevajadzēs izmantot

dubult vaicājumus):

Select … Limit n, m

Select count(*)

Šo vaicājumu vietā var izmantot:

Select … Limit n, m

Select FOUND_ROWS()

Pielietot UNION lai pārrakstītu lēnus OR vaicājumus:

Select *

From myTable

Where col1 = ‘foo’ OR col2 = ‘bar’

Tā vietā pārrakstīt:

(Select *

From myTable

Where col1 = `foo`)

UNION

( Select *

From myTable

Where col2 = ‘bar’)

Sistematizēšana, ierobežošana, un atkārtota sistematizēšana:

(Select *

FrommyTable

Where col1 = `foo`

Orderby col2 Limit 50)

Orderby col3

4.

Page 21: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

4. Secinājumi

Mūsdienās MySQL ir viena no populārākajām relāciju datubāzu vadības sistēmām, ko

izmanto visā pasaulē. Ar tās palīdzību ir iespējams izstrādāt datu krātuvēs, kuras atvieglo darbu

ikdienas.

Vaicājumi ļauj izgūt nepieciešamos datus no datu krātuvēm. Visbiežāk pielieto

vaicājumus, kas iegūst datus no tabulām. Vaicājums var atlasīt mums nepieciešamos datus un tos

sakārtot izmantojot group by un order.

Taču vaicājumi ne tikai spēj atlasīt datus, ko mēs esam ievadījuši tabulās, bet arī veikt

aritmētiskus un ģeometriskus aprēķinus ar šiem datiem. Ka arī vaicājumus var pielietot lai

salīdzinātu datus dažādās kolonās. Vaicājumi ļauj mums iegūt ļoti daudzveidīgu informāciju,

taču daudzi cilvēki vienkārši nezin vai nespēj pilnvērtīgi izmantot šīs iespējas. MySQL

programma, protams, spēj mazliet palīdzēt lietotājam ar explain select, kas palīdz izsekot, ko

konkrētais vaicājums dara un piedāvāt alternatīvas.

Vēl viena svarīga lieta, kas jāzina darbojoties ar datubāzēm un vaicājumiem ir

optimizēšana, kas ļauj mums iegūt ātrāk datus tajā paša laikā nenodarot kaitējumu datiem un

datoriem. Bieži vien pietiek ar to kā tiek korekti sastādītas datubāzēs un tabulās ar

vispiemērotākajiem parametriem, lai nodrošinātu labu MySQL veiktspēju.

Page 22: MySQL -    Web viewMySQL ir šāds programmēšanas valodu atbalsts: Delphi, C, C + +, Eiffel, Java, Lisp, Perl, PHP, PureBasic, Python, ... 7.att. Group_concat pielietošana

Literatūras saraksts

1. http://www.w3resource.com/MySQL/MySQL-tutorials.php

2. http://www.artfulsoftware.com/infotree/queries.php#1031

3. http://www.slideshare.net/renato_shira/MySQL-optimization

4. http://www.petefreitag.com/item/613.cfm

5. http://stackoverflow.com/questions/8599204/how-can-i-make-this-query-more-

efficient

6. http://dev.mysql.com/doc/refman/5.0/en/select.html