89
RĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas un optimizācija Sybase DBVSIzstrādāja: Mārtiņš Paukšte (II DGDB – 3 Apl.Num.: 051RDB097) Pārbaudīja: asoc. prof. Jānis Eiduks

Ievads - Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Embed Size (px)

Citation preview

Page 1: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

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

„CASE rīki datu bāzu projektēšanā”

„SQL konstrukcijas un optimizācija Sybase DBVS”

Izstrādāja: Mārtiņš Paukšte (II DGDB – 3 Apl.Num.: 051RDB097)Pārbaudīja: asoc. prof. Jānis Eiduks

Rīga, 2012

Page 2: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Ievads_________________________________________________________________________________4

Pieslēgšanās datubāzei un pārvaldība_______________________________________________________6

Datu ielāde no faila_____________________________________________________________________11

SQL izpildes plāns_______________________________________________________________________16

Pilnā skenēšana (Fullscan)________________________________________________________________21

Skenēšana pēc indeksa (Index Scan)________________________________________________________22

Iegultie cikli (Nested Loops)_______________________________________________________________24

HASH Savienojums (Hash Join)____________________________________________________________27

Indeksa izmantošanas uzspiešana__________________________________________________________29

Sapludināšanas savienojums (Merge Join)___________________________________________________30

ASA un ASE!___________________________________________________________________________33

Datubāzes atmiņas palielināšana (ASE)_____________________________________________________37

Character Set maiņa_____________________________________________________________________38

Statistikas savākšana____________________________________________________________________42

Tabulu savienošanas ieteikumi____________________________________________________________43

Transact-SQL jeb T-SQL___________________________________________________________________46

Sybase raksturīgais SQL (DML,DDL) un T-SQL_________________________________________________47

Palīgtabula (dual?)____________________________________________________________________________47

Rezervēto vārdu ierobežojumi__________________________________________________________________47

Reģistra jutīgums_____________________________________________________________________________47

SQL atvasinātās (derived) tabulas________________________________________________________________48

Datumu funkcijas_____________________________________________________________________________48

Teksta apstrādes funkcijas______________________________________________________________________49

Skaitliskās funkcijas___________________________________________________________________________50

Salīdzināšanas operatori_______________________________________________________________________51

Lokālās īslaicīgās tabulas izveidošana (ASA)________________________________________________________51

Materializētie skati (ASA)______________________________________________________________________52

Surogāt-atslēgas un identifikatori________________________________________________________________52

Page 3: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Tabulas līmeņa ierobežojumi (Table-Level Constraints)______________________________________________53

XML datu apstrāde (ASE)_______________________________________________________________________55

SQL - datu grupēšana un citas konstrukcijas__________________________________________________57

Group by - Having____________________________________________________________________________57

GROUP BY - CUBE/ROLLUP (ASA)________________________________________________________________58

Hierarhiskie jeb Rekursīvie vaicājumi____________________________________________________________58

Klona tabulas vaicājumi (ASA)___________________________________________________________________59

Kopsavilkums__________________________________________________________________________60

Trūkumi____________________________________________________________________________________60

Priekšrocības________________________________________________________________________________60

Secinājumi__________________________________________________________________________________60

Izmantotie avoti________________________________________________________________________62

Tulkojumi un saīsinājumi_________________________________________________________________63

Pielikumi______________________________________________________________________________64

DWH DLL____________________________________________________________________________________64

DWH tabulu sasaiste__________________________________________________________________________65

Page 4: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Ievads

DBVS instalāciju var lejupielādēt no www.sybase.com. Tika izvēlēts produktu komplekts, ka saucas „SQL

Anywhere Developer Edition”:

Produkta instalācijas laikā būs nepieciešams ievadīt reģistrācijas kodu, ko var saņemt pēc reģistrācijas

izstrādātāja vietnē un kas ir derīga 60 dienas.

Page 5: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Šajā gadījumā tika izvēlēta SQL Anywhere versija 12.0.1 un instalēta uz Windows x86 operētājsistēmas:

Page 6: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Pieslēgšanās datubāzei un pārvaldība

Dialogam ar datubāzi, tiek lietots rīks „Interactive SQL”:

Šis instalācijas komplekts ietver arī datubāzes parauga instanci. Ar pogu <Browse> atver ODBC datu avotus,

kurā jau ir pievienota „SQL Anywhere 12 Demo”, kuru arī izvēlas.

Page 7: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Norāda lietotāju „DBA” un paroli „sql” (pēc noklusējuma) un spiež <Connect>:

Un nākošajā logā jau var rakstīt SQL komandas un sākt strādāt ar datubāzi:

Page 8: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Otrs lietojums, kas nāk komplektā, ir „Sybase Central”, kurā pieejamas dažādas administratīvas iespējas:

Izmanto tos pašu jau zināmos pieslēgšanās parametrus.

Datubāzes pārskats

Page 9: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Datubāzes objektu pārskats

Pieslēgumu pārskats – tajā redzamas 2 sesijas – viena ir iepriekš palaistā „Interactive SQL” sesija, bet otra –

šī paša „Sybase Central” sesija:

Page 10: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Ir arī iespēja apskatīt tādu nosacītu ER diagrammu, kurā var izvēlēties attēlojamās tabulas:

„ER diagramma”

Page 11: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Datu ielāde no faila

Šo iespēju izvēlējos uzsvērt atsevišķi, jo man pašam tā atviegloja darbu un izpelnījās manu atzinību ar savu vienkāršību, saprotamību.

Izveidojam tabulu:

CREATE TABLE mpa_employees (employee_id INTEGER ,name VARCHAR(255) ,person_first_name VARCHAR(255) ,person_last_name VARCHAR(255) ,person_code VARCHAR(255) ,department_id INTEGER );

Piemēram ir sagatavots .csv fails, kas satur datus par personām. Tajā ir 5 kolonnas: identifikators, personas kods, vārds un uzvārds, atsevišķi vārds, atsevišķi uzvārds.

Faila fragments:

Iestartējam programmu Sybase Interactive SQL un izvēlamies Data > Import:

Page 12: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Tas atver vedni, kurā 1. solī norāda pirmo opciju – datu ielāde no faila:

Norāda failu:

Izvēlas ielādēt datus eksistējošā tabulā (mpa_employees):

Page 13: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Nākošajā solī iespējams norādīt iestatījumus faila nolasīšanai – ko uztvert par kolonnu atdalītājsimbolu utt.

Atkarībā no iestatījumiem, tiek parādīts priekšskatījums ar dažiem no faila apstrādātajiem ierakstiem – lai varētu redzēt vai pareizi esam sakonfigurējuši faila lasīšanu:

Nākošajā solī iespējams norādīt kolonnu secību, lai tā atbilstu faila kolonnu secībai:

Page 14: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Izmantojot izvēlni uz katras kolonnas, sakārto atbilstību:

Tālāk notiek faila imports:

Automātiski izpildās atlases vaicājums uz aizpildīto tabulu:

Page 15: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Piezīme: Šajā brīdī ir jāuzmanās, jo uzģenerētais vaicājums no tabulas tiek rakstīts tajā pašā SQL failā, kas ir bijis atvērts, turklāt viss tā iepriekšējais saturs tiek nodzēsts. Tāpēc, ja failā pirms tam bija kaut kas svarīgs, tad labāk nospiest divreiz CTRL+Z, lai atgrieztu visu pazaudēto tekstu.

Piezīme: Šajā brīdī vēl var atcelt ielādētos datus ar ROLLBACK. Ja vēlas datus saglabāt, tad jāizpilda SQL > Commit:

Page 16: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

SQL izpildes plāns

Vaicājuma izpildes plānu no Interactive SQL konsoles palaiž, stāvot uz vaicājuma un izvēloties no rīkjoslas

Tools > Plan Viewer vai ērtāk ar Shift + F5.

Tas atver plāna analīzes logu Plan Viewer, kurā pēc <Get Plan> pogas nospiešanas optimizators uzģenerē

izpildes plānu:

Page 17: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas
Page 18: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Vaicājumu var turpināt pielāgot šajā pašā logā, bet dīvaini un ļoti neērti gan ir tas, ka nav pielāgojams SQL

loga augstums. Attēlā redzamais plāns analizēts šādam vaicājumam:SELECT dep.DepartmentName ,so.orderDate ,cus.* FROM Departments dep ,employees emp ,salesOrders so ,customers cusWHERE dep.DepartmentID = emp.DepartmentID AND emp.employeeID = so.salesRepresentative AND emp.Surname = 'Chin' AND emp.givenName = 'Philip' AND so.customerID = cus.ID AND cus.City = 'Elmira'ORDER BY so.orderDate DESC;

Ir redzams grafisks vaicājuma attēlojums un, uzklikšķinot uz katru koka mezglu, labās puses logā (šķirkļos

<Details> un <Advanced Details>) parādās detalizēta informācija par doto operāciju.

Tas, kas vēl ir parocīgi, ir vaicājuma izpildes plāna saglabāšanas iespēja.

Fails saglabājas ar paplašinājumu *.saplan XML formātā:

Faila fragments

Page 19: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Attiecīgi šādus plānu failus ar šo pašu rīku var atvērt vēlāk un var salīdzināt, piemēram, ar tāda paša

vaicājuma izpildes plānu kādā citā reizē. Protams, var arī salīdzināt plānus kā vienkāršus 2 XML failus ar

jebkuru teksta salīdzinātāju.

Te gan ir viens mīnuss – uz Windows mašīnas rīks pats neasociē savus .saplan failus ar sevi. Tāpēc uzreiz

šādu failu atvērt nevar – vienmēr ir jāpieslēdzas DB ar Interactive SQL, tad jāatver Plan Viewer un tad tikai

var atvērt failu ar saglabāto plānu.

Izpildes plānu bez grafiska attēlojuma var apskatīt arī pašā Interactive SQL logā. Tas gan ir nedaudz

neparocīgāk, jo, ja vaicājumā ir tekstuāli filtri, tad vaicājums ir jāparediģē - viena apostrofa vietā jāliek 2

apostrofi.

Īsais variants – noderīgi ātrai plānu salīdzināšanai, taču sniedz minimālu informāciju par izpildes plānu:SELECT EXPLANATION ('SELECT dep.DepartmentName ,so.orderDate ,cus.* FROM Departments dep ,employees emp ,salesOrders so ,customers cusWHERE dep.DepartmentID = emp.DepartmentID AND emp.employeeID = so.salesRepresentative AND emp.Surname = ''Chin'' AND emp.givenName = ''Philip'' AND so.customerID = cus.ID AND cus.City = ''Elmira''ORDER BY so.orderDate DESC;') AS myShortPlan;

Tas atgriež visu plāu vienā teksta rindiņā:

Garais variants – sniedz jau detalizētāku informāciju par plānu un diezgan pārskatāmā veidā:SELECT PLAN ('SELECT dep.DepartmentName ,so.orderDate ,cus.* FROM Departments dep ,employees emp ,salesOrders so ,customers cusWHERE dep.DepartmentID = emp.DepartmentID AND emp.employeeID = so.salesRepresentative AND emp.Surname = ''Chin'' AND emp.givenName = ''Philip'' AND so.customerID = cus.ID AND cus.City = ''Elmira''ORDER BY so.orderDate DESC;') AS myLongPlan;

Page 20: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Tas arī rezultātu atgriež 1 teksta rindiņā, taču tajā ir teksts vairākās rindās. Ar peles dubultklikšķi atver logu,

kurā var pārskatāmā veidā aplūkot izpildes plānu:

Piezīme: Pēc noklusējuma programmas iestatījumos var būt pārāk maza vērtība nolasītās vērtības

ierakstīšanai kešatmiņā. Tāpēc to vēlams palielināt (attēlā noklusētā vērtība šim plānam tika palielināta uz

1000).

Page 21: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Pretējā gadījumā, verot vaļā plānu ar peles dubultklikšķi, iegūs kļūdu:

Un tiks parādīts tikai daļējs izpildes plāna teksts.

Page 22: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Pilnā skenēšana (Fullscan)

Aplūkosim izpildes plānu vienkāršam vaicājumam uz tabulu, kurā jau ieimportējām datus - 1’190’779

ierakstus par darbiniekiem.

Starp citu, arī Sybase SQL COUNT funkciju var izmantot ar nedokumentēto COUNT(1):SELECT count(1) FROM mpa_employees;

Tātad apskatīsim plānu vaicājumam:SELECT * FROM mpa_employees WHERE name = 'IMANTS PAUKŠTE';

Izpildes plāns - FullScan

Page 23: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Skenēšana pēc indeksa (Index Scan)

Izveidojam indeksu darbinieku tabulai (mpa_employees) uz lauku, kas satur darbinieka vārdu (name):

Tagad izpildes plāns tam pašam vaicājumam jau izskatās citādāk.

Tiek izmantots tikko izveidotais indekss. Šāds vaicājums izpildītos ievērojami ātrāk.

Page 24: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Arī diagrammā ģeometriskā forma ap tabulas nosaukumu ir trapecveidīga – tas liecina par indeksa izmantošanu.

Page 25: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Šīs attēlojuma iezīmes ir arī konfigurējamas, turpat uz diagrammas ar peles labo taustiņu atvērot izvēlni Customize:

Page 26: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Iegultie cikli (Nested Loops)

Tas ir divu tabulu sasaistes princips, kad katram vienas tabulas ierakstam meklē atbilstošu ierakstu otrā

tabulā, skenējot to pēc indeksa.

Izveidojam tabulu, kas saturēs datus par nodaļām:CREATE TABLE mpa_departments (department_id INTEGER ,dept_no INTEGER ,department_name VARCHAR(255) );

Izveidojam .csv failu un ielādējam to tabulā ar jau minēto rīku:

Page 27: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Aizpildām dažiem tūkstošiem darbinieku tā departamenta piederību ar sekojošām primitīvām SQL

komandām:UPDATE mpa_employees SET department_id = 1 WHERE employee_id BETWEEN 1000 AND 2000;UPDATE mpa_employees SET department_id = 2 WHERE employee_id BETWEEN 2000 AND 3000;UPDATE mpa_employees SET department_id = 3 WHERE employee_id BETWEEN 3000 AND 4000;UPDATE mpa_employees SET department_id = 4 WHERE employee_id BETWEEN 4000 AND 5000;UPDATE mpa_employees SET department_id = 5 WHERE employee_id BETWEEN 5000 AND 6000;UPDATE mpa_employees SET department_id = 6 WHERE employee_id BETWEEN 6000 AND 7000;UPDATE mpa_employees SET department_id = 7 WHERE employee_id BETWEEN 7000 AND 8000;UPDATE mpa_employees SET department_id = 8 WHERE employee_id BETWEEN 8000 AND 9000;UPDATE mpa_employees SET department_id = 9 WHERE employee_id BETWEEN 9000 AND 10000;UPDATE mpa_employees SET department_id = 10 WHERE employee_id BETWEEN 10000 AND 11000;

Ar taustiņu kombināciju Ctrl + Shift + C – izpilda COMMIT:

Apskatīsim izpildes plānu sekojošam vaicājuma, kas savieno departamentus (mpa_departments) un

darbiniekus (mpa_employees):SELECT dep.dept_no,dep.department_name ,emp.name,emp.person_code FROM mpa_departments dep ,mpa_employees empWHERE dep.department_id = emp.department_id;

Izveidosim indeksu, lai ieslēgtos, kas, visticamāk, liks optimizatoram izvēlēties NESTED LOOPS:CREATE INDEX mpa_employees_u02 ON mpa_employees(department_id);

Page 28: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Diagrammā tabulas tiek identificētas ar SQL vaicājumā norādītājiem pieņemtajiem vārdiem „dep” un

„emp”. Tabulas tiek savienotas ar „JNL” (Join Nested Loops).

Šādi izskatās plāns tekstuālā veidā:( Plan [ Total Cost Estimate: 8.9028, Costed Best Plans: 2, Costed Plans: 46, Optimization Time: 0.00067225, Estimated Cache Pages: 21546 ] ( NestedLoopsJoin ( TableScan ( mpa_departments dep ) ) ( IndexScan ( mpa_employees emp ) mpa_employees_u02[ emp.department_id = dep.department_id : 9.9685% Statistics | Join ] ) ))

Page 29: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

HASH Savienojums (Hash Join)

Izveidosim nelielu tabuliņu, kas saturēs pilsonību sarakstu:CREATE TABLE mpa_nationalities (code VARCHAR(5) ,description VARCHAR(30) );

Ieliksim tajā 10 ierakstus ar vienkāršu INSERT:INSERT INTO mpa_nationalities VALUES('LV','Latvijas');INSERT INTO mpa_nationalities VALUES('RU','Krievijas');INSERT INTO mpa_nationalities VALUES('EE','Igaunijas');INSERT INTO mpa_nationalities VALUES('GB','Apvienotās karalistes');INSERT INTO mpa_nationalities VALUES('DE','Vācijas');INSERT INTO mpa_nationalities VALUES('US','ASV');INSERT INTO mpa_nationalities VALUES('PL','Polijas');INSERT INTO mpa_nationalities VALUES('UA','Ukrainas');INSERT INTO mpa_nationalities VALUES('LT','Lietuvas');INSERT INTO mpa_nationalities VALUES('TH','Taizemes');

Pievienojam darbinieku tabulai lauku, ar kuru sasaistīsim nelielo pilsonības tabulu.ALTER TABLE mpa_employees ADD nationality_code VARCHAR(5)

Izmantojot vienkāršas UPDATE izteiksmes UPDATE mpa_employees SET nationality_code = 'LV' WHERE employee_id BETWEEN 0 AND 600000;UPDATE mpa_employees SET nationality_code = 'RU' WHERE employee_id BETWEEN 600000 AND 1200000;UPDATE mpa_employees SET nationality_code = 'EE' WHERE employee_id BETWEEN 1200000 AND 1800000;UPDATE mpa_employees SET nationality_code = 'GB' WHERE employee_id BETWEEN 1800000 AND 2400000;UPDATE mpa_employees SET nationality_code = 'US' WHERE employee_id BETWEEN 3000000 AND 3600000; UPDATE mpa_employees SET nationality_code = 'PL' WHERE employee_id BETWEEN 3600000 AND 4200000;UPDATE mpa_employees SET nationality_code = 'LT' WHERE employee_id BETWEEN 4800000 AND 5400000;UPDATE mpa_employees SET nationality_code = 'TH' WHERE employee_id BETWEEN 5400000 AND 5973562;

Pieņemam, ka saprātīgs DBVS optimizators izvēlēsies lietot Hash Join, par cik viena no saistāmajām

tabulām ir neliela un to var ielasīt operatīvajā atmiņā. Aplūkosim plānu sekojošajam vaicājumam:SELECT nat.code + ':' + nat.description AS nationality ,emp.person_first_name + emp.person_last_name AS person FROM mpa_employees emp ,mpa_nationalities nat WHERE emp.nationality_code = nat.code;

Page 30: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

JH*, acīmredzot, apzīmē tieši šo sasaistes veidu.

Izpildes plāns teksta veidā:( Plan [ Total Cost Estimate: 16.076, Costed Best Plans: 2, Costed Plans: 52, Optimization Time: 0.00074356, Estimated Cache Pages: 21546 ] ( WorkTable ( HashJoin* [ emp.nationality_code = nat.code : 10% Statistics | Join ] ( TableScan ( mpa_employees emp ) ) ( TableScan ( mpa_nationalities nat ) ) ) ))

Page 31: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Indeksa izmantošanas uzspiešana

Apskatīsim izpildes plānu šādam vienkāršam vaicājumam uz jau iepriekš izveidoto nelielo pilsonības

tabuliņu:SELECT * FROM mpa_nationalities WHERE description LIKE 'A%';

Notiek tabulas pilna skenēšana. Tas, protams, šādai mazai tabulai arī ir pilnīgi piemēroti.

Izveidosim unikālu indeksu uz abiem tabulas laukiem:CREATE UNIQUE INDEX mpa_nationalities_U1 ON mpa_nationalities(code,description);

Apskatīsim vai izpildes plāns ir mainījies:SELECT EXPLANATION ('SELECT * FROM mpa_nationalities WHERE description LIKE ''A%''') AS myPlan

Īsajā plānā ir redzams „<seq>” (Sequential Read) – tātad lasīšanas veids nav mainījies.

Bet tagad pielietosim ieteikumu izmantot izveidoto indeksu ar sekojošu vaicājumu:SELECT * FROM mpa_nationalities WITH (INDEX(mpa_nationalities_U1)) WHERE description LIKE 'A%'

Plāna diagrammā ir redzamas izmaiņas – ieteikums tiek ņemts vērā:

Arī apskatot īsā plāna variantu ar komandu:SELECT EXPLANATION ('SELECT * FROM mpa_nationalities WITH (INDEX (mpa_nationalities_U1))WHERE description LIKE ''A%''') AS myPlanTuned

Līdzīgi ar WITH var norādīt vairākus indeksus, atdalot tos ar komatu.

WITH (NO INDEX) – šādi var norādīt, lai neizmantotu indeksus nekādā gadījumā.

Page 32: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas
Page 33: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Sapludināšanas savienojums (Merge Join)

Mēģināsim panākt vēl vienu tabulu savienošanas veidu „Sort-Merge Join” jeb „Merge Join”.

Izveidosim tabulu, kas saturēs darbinieku tabulas dublikātus.CREATE TABLE mpa_employee_duplicates (emp_name VARCHAR(255) ,creation_date DATE );

Ievietojam datu kopiju jaunajā tabulā:INSERT mpa_employee_duplicatesSELECT name, GETDATE() FROM mpa_employees;

Izveidojam sekojošu vaicājumu:SELECT emp.person_code ,dup.* FROM mpa_employees emp ,mpa_employee_duplicates dup WHERE emp.name = dup.emp_name;

Vaicājums atlasa datus no darbinieku (emp) un darbinieku kopijas (dup) tabulām un savieno tās pēc

darbinieka vārda.

Uz emp.name ir jau iepriekš izveidotais indekss mpa_employees_n01. Tādus DB objektus kā indeksus var

apskatīt Sybase Cetral, taču izskatās, ka tas nav paredzēts lielam objektu skaitam, jo nav nekādas

filtrēšanas iespējas – ir tikai saraksts:

Bet, par cik abās tabulās ir vairāk kā miljons ierakstu, tad diez vai optimizators izmantos minēto indeksu un

Nested Loops, lai savienotu šīs tabulas.

Page 34: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Vaicājuma izpildes plāns:

Plānā tomēr redzams, ka starp tabulām emp un dup ir „JHP”(Join Hash Parallel). Respektīvi, tiek lietots

HASH savienošanas veids. Vārds „Parallel” nozīmē, ka paralēli darbojas vairāki procesi jeb servisi. Redzams

arī, ka kā alternatīvs variants ticis izskatīts Nested Loops savienojums.

Bet mērķis tomēr bija panākt Merge savienošanu. Ir zināms, ka Merge ir izdevīgāks tad, ja abi lielie datu

bloki (tabulas) ir sakārtotas pēc savienojamajām vērtībām. Šim nolūkam arī uz otra savienojuma lauka

dep.emp_name izveidosim indeksu un cerēsim, ka optimizators nolems izmantot Merge:

CREATE index mpa_emp_dup_n01 ON mpa_employee_duplicates (emp_name);

Page 35: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Un apskatāmies plānu vēlreiz:

Plānā ir parādījies „JM” (Join Merge). Pie milzīgiem datu apjomiem šāds savienojums varētu būt

piemērotākais.

Page 36: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

ASA un ASE!

Sybase bija pietiekoši neskaidri savu produktu aprakstos, tādēļ šādā pašapmācības procesā, nonākot līdz šai

vietai, tika konstatēts, ka „SQL Anywhere” ir paredzēts vairāk kā mobila DVBS un darbojas ar „ASA”

(Adaptive Server Anywhere), kas piedāvā daudz mazāk padziļinātas funkcionalitātes atšķirībā no „ASE”

(Adaptive Server Enterprise), BET (kā vēlāk izrādījās) dažās lietās arī Anywhere ir pārāks par Enterprise).

Turklāt ASE nav vajadzīga licencēšana, tāpēc tālākais darbs tika turpināts papildus ar „ASE 15.7 DE”:

Turpmāk tekstā iespējām, kas būs pieejamas tikai ar vienu no serveriem, būs atzīmēts „ASA” vai „ASE”.

Page 37: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Izvēlamies pilno instalāciju, lai vēlāk atkal neattaptos, ka kaut kas pietrūkst:

Izvēlamies izstrādātāja bezmaksas licenci:

Visas utilītas, kas ir ietvertas šajā instalācijas pakā:

Page 38: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Ieliek papildus 2 ķekšus:

1) Adaptive Server veiktspējas konfigurācijai

2) Parauga datubāzu izveidošanai

Piezīme: Obligāti sekot līdzi Windows firewall paziņojumiem un atļaut visu jauno servisu darbību.

Page 39: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Arī ASE nāk līdzi līdzīga konsole „Interactive SQL”:

Izveidotais serveris pēc noklusējuma sakrīt ar lokālās mašīnas nosaukumu (PC Name) un, lai pieslēgtos DB,

izmanto pa ceļam instalācijas laikā izveidoto lietotāju „sa” un norādīto paroli:

ASE darbs notiek ar ļoti līdzīgu „Interactive SQL” ar nelielām atšķirībām, un izmantojamajās SQL

konstrukcijās ir atšķirības.

Salīdzinājumam – tas ir līdzīgi kā Oracle Express Edition (XE) un Oracle Enterprise Edition.

Page 40: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Piezīme: Iespējams, ka pēc datora pārstartēšanas ASE pats neiestartēsies. Tādā gadījumā var palaist Sybase

> Adaptive Server Enterprise > Server Config un, mēģinot pieslēgties, pie reizes var iestartēt serveri:

Vai arī atvērt My Computer > Manage > Services And Applications > Services - atrast vajadzīgo servisu un

iestartēt to:

Page 41: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Datubāzes atmiņas palielināšana (ASE)

Šo punktu atsevišķi uzsvēru, jo šīs problēmas risināšana aizņēma neadekvāti daudz laika.

Kad ASE ir uzinstalēts, izpildām visus DDL skriptus un datu ielādes, kas minētas iepriekš, arī šajā DB.

Radās problēmas ar žurnāla informācijas uzglabāšanu datu importa laikā – imports tika apturēts, jo

transakciju žurnālam pietrūcis vietas:

Acīmredzot, nav noteikts pietiekoši liela vieta žurnāla informācijai.SELECT db_name() -- Noskaidro DB nosaukumu

sp_helpdb master -- Parāda visas ierīces (Devices), ko lieto šī DB

Ir tikai 1 ierīce, kas arī saucas „master” (Tāpat kā datubāze)DISK RESIZE name = master , size ="100M" -- Palielina ierīces (Device) izmēru par norādīto apjomu

sp_helpdevice master -- Var apskatīt ierīces izmērus

ALTER DATABASE <dbname> LOG ON <devicename> = <size in MB> -- Palielina Log segment par norādīto apjomu

ALTER DATABASE master LOG OFF master = "50M"sp_helpdevice master -- Var pārliecināties, ka physical disc Free space ir samazinājies

par Log piešķirto apjomu

Page 42: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Tagad datu importam vajadzētu pabeigties veiksmīgi:

Character Set maiņa

Tika konstatēta problēma, ka SAE tika uzinstalēts ar nepareizu CharacterSet.

Ielādētajā tabulā mpa_employees latviešu valodas diakritiskās zīmes bija nelasāmas. Lai to labotu, ir

jānomaina datubāzes CharacerSet un, iespējams, jāatkārto ielāde.

To dara ar programmu „Server Config:

Izvēlas konfigurēt esošu Adaptive Server:

Page 43: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Izvēlas vienīgo serveri, kas, kā jau tika minēts, pēc noklusējuma saucas tāpat kā lokālā mašīna:

Pieslēdzas ar to pašu lietotāju „sa”:

Izvēlas Character Set pievienošanu/izdzēšanu:

Page 44: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Ar pieejamo pogu „Add” (bultiņa) pievieno „Unicode 3.1 UTF-8 Character Set”:

Atgriežas iepriekšējā lokā un izvēlas noklusētā Character Set lietošanu (Set Default):

Izvēlas nupat pievienoto:

Page 45: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Saglabā izmaiņas:

Tas var prasīt kādu laiku:

Page 46: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Statistikas savākšana

Kā zināms, vaicājumu optimizatoram ir nepieciešama aktuāla statistika par datubāzes objektiem (tabulām,

jauniem indeksiem, ienākošajiem datiem utt.). DVBS „SQL Anywhere” (Adaptive Server Anywhere) kopš

1992. gada piedāvā autonomu, paš-organizējošu statistikas savākšanu, tāpēc tam nav paredzēta īpaša

komanda kā tas ir citās DBVS. SQL Anywhere 12. versijā šī funkcionalitāte ietver:

selektivitātes novērtējuma kļūdu vaicājumos apkopošana un kategorizēšana

automātiska, autonoma resursu taupīga statistisko datu kļūdu labošana

autonoms kolonnu histogrammu uzturēšanas monitorings

Taču Adaptive Server Enterprise versijā ir pieejama manuāla statistikas savākšanas sintakse:UPDATE STATISTICS mpa_employees; -- Savāc norādītajai tabulai statistiku

Sintakse:update statistics table_name [[ partition data_partition_name ] [ (column_list ) ] | index_name [ partition index_partition_name ] ] [ using step values ] [ with consumers = consumers ][, sampling=N percent ]

Page 47: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Tabulu savienošanas ieteikumi

ASE piedāvā iespēju dot padomus SQL vaicājumu izpildes plānu optimizatoram.

Apskatīsim izpildes plānu uz ASE tam pašam vaicājumam, ko izpildījām uz ASA:SELECT dep.dept_no,dep.department_name ,emp.name,emp.person_code FROM mpa_departments dep ,mpa_employees empWHERE dep.department_id = emp.department_id;

ASE Interactive SQL plāna pārlūks izskatās nedaudz savādāk un mūsdienīgāk:

Taču tam NAV plāna pārģenerēšanas pogas, kas atkal ir apgrūtinoši.

Page 48: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Plāna pārlūkā ir jauns šķirklis XML, kurā var apskatīt plānu XML formātā:

Ir redzams, ka Nested Loops vietā šoreiz optimizators nolēmis lietot Sort-Merge savienošanu. Šajā

gadījumā neinteresējamies, kāpēc tas tā ir, bet vaicājumam izmantojam ieteikumu (Hint), kas piespiedīs

izmantot Nested Loops:-- ASE: Uzspiež Nested LoopsSELECT dep.dept_no,dep.department_name ,emp.name,emp.person_code FROM mpa_departments dep ,mpa_employees empWHERE dep.department_id = emp.department_idplan "(nl_join (scan dep) (scan emp))" -- Hint

Un izpildes plānā redzamas izmaiņas:

Page 49: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Tāpat varam uzspiest lietot Hash Join:-- ASE: Uzspiež Hash JoinSELECT dep.dept_no,dep.department_name ,emp.name,emp.person_code FROM mpa_departments dep ,mpa_employees empWHERE dep.department_id = emp.department_idplan "(h_join (scan dep) (scan emp))" -- Hint

Līdzīgā veidā ir pielietojami arī citi ieteikumi.

Piemēram, pirms vaicājuma ieliekot ieteikumu „SET FORCEPLAN ON”, vaicājuma izpildei tiks uzspiesta

tabulu savienošanas secība – tāda kādā tabulas uzskaitītas vaicājuma FROM daļā.

Page 50: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Transact-SQL jeb T-SQL

Sybase DBVS bez SQL ir sava procedurālā programmēšanas valoda „Transact-SQL” – SQL paplašinājums,

kas sevī ietver tādas lietas kā:

• Lokālie mainīgie

• Mainīgo izmantošana SQL vaicājumos

• Dažādas funkcijas teksta, datuma un matemātiskās funkcijas

• Plūsmas kontrole (IF, WHILE,…)

• Glabājamās procedūras (Nav glabājamās pakas)

• Izņēmumu apstrāde

• Kopu pievienošanu (BULK INSERT)

• SQL vaicājumu diagnosticējošās operācijas

• U.c.

Līdzīgi kā Oracle ir PL/SQL, taču šim ir daudz mazāk iespēju, salīdzinot ar Oracle.

Neliels piemērs – procedūras izveidošana un izpilde:

CREATE TABLE mpa_test_table (id INTEGER);DROP PROCEDURE mpa_delete_record;

CREATE PROCEDURE mpa_delete_record @rec_id INTEGER = NULLAS IF @rec_id IS NULL RAISERROR 50001 "Kļūda! Padodiet parametru" ELSE DELETE mpa_test_table WHERE id = @rec_id

IF @@rowcount > 0 print 'Ieraksts izdzēsts...' -- Nāk ārā tikai uz ASE ELSE print 'Ieraksts ar tādu ID (%1!) tabulā neeksitē...',@rec_id

Procedūras izsaukums:mpa_delete_record 7

INSERT INTO mpa_test_table VALUES(7);

mpa_delete_record @rec_id=7

Page 51: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Sybase raksturīgais SQL (DML,DDL) un T-SQL

Sybase ir dažas apstrādes funkcijas, kas it kā nav redzētas tādā formā citās DBVS. Tālāk sekos daži piemēri.

Protams, šīm funkcijām var atrast alternatīvas – citu funkciju kombinācijas.

Palīgtabula (dual?)

Lai parādītu kādu vērtību, nav jāizmanto kāda palīgtabula kā „dual” Oracle (SELECT 'ABC' FROM dual).

Šādu vaicājumu Sybase raksta vienkārši bez atsaukšanās uz tabulu:

Rezervēto vārdu ierobežojumi

Nevar izmantot tabulu kolonnu nosaukumos rezervētos vārdus.

Piemēram, sekojošu DML uz ASE nevarētu izpildīt dēļ rezervētā vārda COUNT:CREATE TABLE mpa_test_table (id INTEGER ,count INTEGER );

Piemēram, Oracle DBVS tas problēmas nesagādā.

Reģistra jutīgums

ASE SQL ir reģistra jutīgs. Piemēram, ja tabulas DDL būs šāds:CREATE TABLE mpa_test_table (id INTEGER ,countABC INTEGER );

Tad vaicājums:SELECT countAbc FROM mpa_test_table;

Iegūs kļūdu:

Jāatsaucas ir precīzi uz tādu pašu lauku kā ir definēts DLL („countABC”).

Page 52: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Uz ASA tas neattiecas.

Page 53: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

SQL atvasinātās (derived) tabulas

Tas ir jēdziens Sybase SQL, kas nav nekas cits kā SELECT, kas balstīts uz citu SELECT:SELECT * FROM (SELECT * FROM table_1) derived_table_1

Vienkārši šo definīciju ir noderīgi zināt. Un svarīgi, ka atvasinātajai tabulai ir iedots pieņemtais vārds ( alias),

citādi, piemēram, vaicājums: SELECT * FROM (SELECT id FROM mpa_test_table)

- izdos kļūdu:

Ir jāpiešķir pieņemtais vārds jeb Sybase terminoloģijā – korelācijas vārds (Correlation Name). Pareizi būtu

rakstīt šādi:SELECT * FROM (SELECT id FROM mpa_test_table) mtt

Datumu funkcijas

Datumu konvertācijas funkcijā norāda datu tipu uz kādu vēlas konvertēt, konvertējamo vērtību un formātu,

un to lieto sekojoši:SELECT CONVERT(date,'02-29-12',10) myDate -- 10 = mm-dd-yy

SELECT CONVERT(char,getdate(),103) myCharDate -- 103 = dd/mm/yyyy

Konvertācijas formātu tabula

Page 54: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

-- (ASA) Starpība dažādās mērvienībās (dienas, stundas, minūtes) starp 2 norādītiem datumiem:

SELECT YEARS(now()-365*2,now()) y – Gadi

SELECT MONTHS(now()-30*3,now()) m – Mēneši

SELECT DAYS(now()-100,now()) d – Dienas

SELECT WEEKS(now()-30,now()) w – Nedēļas

SELECT HOURS(now()-2,now()) h – Stundas

SELECT MINUTES(CONVERT(time,'20:14:00',108),CONVERT(time,'21:15:00',108)) m – Minūtes

SELECT SECONDS(CONVERT(time,'21:10:00',108),CONVERT(time,'21:15:00',108)) s – Sekundes

-- Ar 1 argumentu, var noskaidrot, cik nedēļas pagājuši kopš Kristus dzimšanas līdz norādītajam datumam :)

SELECT WEEKS(now()) weeks_since_Christ

Teksta apstrādes funkcijas

-- (ASA) Iestarpina vienu teksta virkni otrā:SELECT INSERTSTR (3 -- No kuras pozīcijas sākot (+1) ,'Magnetofons' -- Virkne, kurā ievietot ,'XYZ' -- Virkne, kuru ievietot ) str;

Page 55: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

-- Izdzēš konkrētā pozīcijā konkrētu skaitu simbolu un ieliek vietā konkrētu tekstu:SELECT STUFF('1234567890' – Apstrādājamā virkne ,4 -- No kuras pozīcijas sākot ,3 -- Cik simbolus izdzēst ,'xxyzz' -- Ko likt vietā ) str;

-- Atkārto teksta virkni N reizes (Funkcija REPLACE) dara to pašu):SELECT REPLICATE ('123_',4) str;

Skaitliskās funkcijas

SELECT PI() pi; -- PI vērtība (3.14...)

SELECT DEGREES(0.52) rad; -- Pārveido radiānus - grādos (leņķis)

SELECT RADIANS(29.7) deg; -- Pārveido grādus - radiānos (leņķis)

SELECT SQUARE(9) sqr; -- Argumenta reizinājums pašam ar sevi

Page 56: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Salīdzināšanas operatori

SELECT * FROM mpa_test_table;

Šādi operatori nav, piemēram, Oracle SQL:SELECT * FROM mpa_test_table WHERE id !< 3 -- (nav mazāks par)

SELECT * FROM mpa_test_table WHERE id !> 3 -- (nav lielāks par)

Varbūt tas kādā situācijā var noderēt, taču to pašu efektu var panākt ar sekojošiem operatoriem:SELECT * FROM mpa_test_table WHERE id >= 3 -- (lielāks vai vienāds ar)SELECT * FROM mpa_test_table WHERE id <= 3 -- (mazāks vai vienāds ar)

Lokālās īslaicīgās tabulas izveidošana (ASA)SELECT * INTO LOCAL TEMPORARY TABLE mpa_emp_temp_table FROM mpa_employees WHERE name LIKE 'EIŽĒNIJA S%';

Pēc tam no tās var atlasīt datus kā no parastas tabulas:SELECT * FROM mpa_emp_temp_table;

Page 57: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Šī tabula tiek glabāta datubāzes sesijas ietvaros. Citas sesijas tai nevar piekļūt.

Materializētie skati (ASA)

CREATE MATERIALIZED VIEW mpa_mat_mv AS SELECT store_id,product_id,time_id,countX FROM dwh_facts;

1) Nevar veidot materializēto skatu, kas balstās uz datubāzes skatu

2) Nevar neminēt atlasāmos laukus (SELECT * FROM …)

Datu atjaunošana:REFRESH MATERIALIZED VIEW mpa_mat_mv;

Surogāt-atslēgas un identifikatori

ASE nav tādu sekvenču kā Oracle, ko var lietot kā surogāt-atslēgas, taču ir NEWID() funkcija, kas ģenerē

globālus unikālus identifikatorus (GUID), kurus var lietot sekvenču vietā:SELECT NEWID()

CREATE TABLE mpa_test_table(id VARCHAR(255));INSERT INTO mpa_test_table VALUES(NEWID());INSERT INTO mpa_test_table VALUES(NEWID());INSERT INTO mpa_test_table VALUES(NEWID());SELECT * FROM mpa_test_table;

Tas gan nav diez ko efektīvi no tāda viedokļa, ka unikālajai atslēgai vienmēr jāparedz diezgan daudz

atmiņas, jo atslēga ir ļoti gara, lai būtu unikāla globālā līmenī.

ASA tomēr atbalsta datubāzes virknes (Sequences) tāpat kā Oracle:CREATE OR REPLACE SEQUENCE mpa_test_seq;

INSERT INTO mpa_test_table VALUES (mpa_test_seq.NEXTVAL);

Page 58: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

ASE (un daļēji arī ASA) atbalsta tādu lietu kā IDENTITY – kas ir automātisks tabulas ieraksta identifikators.CREATE TABLE mpa_test_table (id integer IDENTITY -- "IDENTITY" - norāda, ka tā būs identificējošā kolonna ,name varchar(30) );

INSERT INTO mpa_test_table (name) VALUES ('A');INSERT INTO mpa_test_table (name) VALUES ('B');INSERT INTO mpa_test_table (name) VALUES ('C');

SELECT * FROM mpa_test_table;

Labums no tā ir tāds, ka uz lauku, kas DDL atzīmēts ar "IDENTITY", var atsaukties ar atslēgvārdu

"syb_identity" - nav jāzina, kā saucas tabulas identificējošais lauks:SELECT * FROM mpa_test_table WHERE syb_identity >= 2;

Tabulas līmeņa ierobežojumi (Table-Level Constraints)

Ir iespējams nodefinēt ierobežojošus likumus tabulas līmenī.

CREATE TABLE mpa_vehicles( vehicle_id INTEGER, vehicle_name VARCHAR(40), CONSTRAINT mpa_bad_car_constraint CHECK (vehicle_id IN (1, 2, 3) AND vehicle_name NOT LIKE 'ZAPOROZHEC'));

INSERT INTO mpa_vehicles VALUES (1,'AUDI');

Sekojošais ieraksts neatbilst „mpa_bad_car_constraint” definētajām prasībām:INSERT INTO mpa_vehicles VALUES (4,'FORD');

Page 59: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

(ASE) Ir iespējams arī definēt ziņojumu, kāds tiks parādīts.

Izveido ziņojumu:sp_addmessage 20001, 'Atļautās vērtības ID (1,2,3) un nedrīkst pievienots ZAZ'

Sasaista ziņojumu ar tabulas ierobežojumu:

sp_bindmsg mpa_bad_car_constraint, 20001

Mēģinām izpildīt vēl vienu neapmierinošu INSERT:INSERT INTO mpa_vehicles VALUES (2,'ZAPOROZHEC');

Lai nomainītu ziņojumu, vienkārši pievieno jaunu. Vecais ziņojums tiks aizvietots.

Šādi noņem ziņojumu no CONSTRAINT:sp_unbindmsg mpa_bad_car_constraint

Izdzēš lietotāja definēto ziņojumu vispār:sp_dropmessage 20001

Page 60: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

XML datu apstrāde (ASE)

SELECT person_first_name,person_last_name,person_code FROM mpa_employees WHERE name LIKE 'INDRIĶIS%'

Pievienojam vaicājumam beigās „FOR XML”, un tas automātiski ģenerēs atlasītos datus XML formātā.SELECT person_first_name,person_last_name,person_code FROM mpa_employees WHERE name LIKE 'INDRIĶIS%'FOR XML

Sekojoša kļūda nozīmē, ka nav ieslēgta XML funkcionalitāte.

XML funkcionalitāti ieslēdz ar:sp_configure 'enable xml',1

Page 61: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Pēc tā izpildes, XML vaicājumam vajadzētu darboties un atgriez rezultātu:

XML iezīmju (Tags) vērtību izgūšanai izmanto funkciju - xmlextract()

Izveidojam testa tabuliņu, kurā ievietosim datus XML formātā:CREATE TABLE mpa_xml_table (id INT, xmldata TEXT)

INSERT mpa_xml_table VALUES(1,'<darbinieki><darbinieka_id>111</darbinieka_id><vards>Mārtiņš</vards><uzvards>Paukšte</uzvards></darbinieki>')

INSERT mpa_xml_table VALUES(2,'<darbinieki><darbinieka_id>222</darbinieka_id><vards>Regīna</vards><uzvards>Kairiša</uzvards></darbinieki>')

SELECT * FROM mpa_xml_table;

-- Izgūst XML datus no konkrētām iezīmēmSELECT emp_id = xmlextract("//darbinieki/darbinieka_id/text()",xmldata), emp_last_name = xmlextract("//darbinieki/uzvards/text()",xmldata) FROM mpa_xml_table WHERE id = 2;

Page 62: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

SQL - datu grupēšana un citas konstrukcijas

Dažiem no tālākajiem piemēriem ir izmantota tabulu struktūra no cita darba (par OLAP CUBE). Skatīt tabulu

DDL un shēmu pielikumos. Ideja ir vienkārša – 1 faktu tabula, kas ir pārdošanas fakts ar 1 rādītāju – pārdoto

preču skaits. Faktu tabulai piesaistās dimensijas – laiks, preces, veikali.

Group by - Having

SELECT * FROM (SELECT p.product_name, s.store_name, t.timeX AS date, SUM (f.countX) sold FROM dwh_facts f, dwh_products p, dwh_stores s, dwh_time t WHERE f.product_id = p.product_id AND f.store_id = s.store_id AND f.time_id = t.time_id GROUP BY product_name, store_name, t.timeX HAVING SUM (f.countX) > 10) dv WHERE date BETWEEN CONVERT (date, '31/01/2008', 103) AND CONVERT (date, '30/06/2009', 103)

Page 63: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

GROUP BY - CUBE/ROLLUP (ASA)

-- Veic agregācijas visiem pieejamajiem datiemSELECT * FROM (SELECT product_name ,store_name ,timeX ,SUM(f.countX) sold --,count(1) FROM dwh_facts f ,dwh_products p ,dwh_stores s ,dwh_time tWHERE f.product_id = p.product_id AND f.store_id = s.store_id AND f.time_id = t.time_id GROUP BY CUBE (product_name,store_name,timeX) -- "CUBE" vietā var lietot arī "ROLLUP")a WHERE timeX IS NULLORDER BY product_name,store_name;

Hierarhiskie jeb Rekursīvie vaicājumi

Sybase SQL nepiedāvā hierarhisko datu apstrādi, taču pastāv alternatīvas – apstrāde ar Transact-SQL

kursoriem un glabājamajām procedūrām, taču tāds risinājums te netiks apskatīts, jo ir pārāk specifisks.

Page 64: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Klona tabulas vaicājumi (ASA)

Lai atvieglotu darbu, izveidosim skatu, kas apvienos visas datu vitrīnas skatus:CREATE OR REPLACE VIEW dwh_facts_v ASSELECT p.product_name ,s.store_name ,t.timeX ,SUM(f.countX) sold FROM dwh_facts f ,dwh_products p ,dwh_stores s ,dwh_time tWHERE f.product_id = p.product_id AND f.store_id = s.store_id AND f.time_id = t.time_id GROUP BY product_name,store_name,timeX;

Sekojošajā vaicājumā 2 lauku atlasīšanā tiek izmantota tā saucamā klona tabulas funkcija OVER:SELECT f.store_name,f.product_name,f.timeX,f.sold ,SUM(sold) OVER(partition BY store_name) store_sum ,SUM(sold) OVER(partition BY store_name,product_name) product_sum_in_storeFROM dwh_facts_v fORDER BY f.store_name,f.product_name;

„store_sum” – katrā rindiņā atrāda pārdoto (sold) kopsummu konkrētajā veikalā.

„producēt_sum_in_store” – katrā rindiņā rāda katra produkta pārdoto konkrētajā veikalā.

Page 65: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Kopsavilkums

Trūkumi

Slikta konsole – var atvērt TIKAI 1 SQL failu. Alternatīva ir startēt otru „Interactive SQL” konsoli.

SQL noskaņošanas logā NEVAR mainīt SQL loga izmēru!

SQL optimizators pats neasociē savus .*saplan failus ar sevi.

Interactive SQL tomēr varēja būt lietotājam draudzīgāks, nevis par katru sīkumu mest uznirstošo

logu ar diezgan grūti saprotamiem paziņojumiem (Vispār prasītos cits rīks).

Neintuitīva informācijas telpa – grūti saprotams, kurš produkts kam ir paredzēts (ASA un ASE) – daļa

uz vienas platformas nav pieejamas tādas lietas kā uz otras un otrādi.

Priekšrocības

Datu importa rīks.

Grafiskais SQL plāna attēlojums (jo īpaši SAE).

(Šeit nav pētīts) Esot laba OLAP datu (plaši lieto finanšu datubāzēs) un Spatial datu apstrāde.

Taupīgāks resursu ziņā par Oracle.

DB drošības risinājumi (Ne velti to lieto ASV aizsardzības departaments).

Laba tiešsaistes dokumentācija.

Transact-SQL (T-SQL) – tas paver daudz plašākas iespējas.

Secinājumi

Vispār bija diezgan interesanti apskatīties kaut ko citu, jo vienīgā DBVS, uz kuras biju strādājis (izņemot MS Access) ir Oracle. Patīkams pārsteigums, protams, bija tas, ka SQL tomēr vienkāršākajā formā tāds pats vien ir – tādā ziņā vismaz ir brīvības sajūta, programmējot jebkurā DBVS.

Bija diezgan grūti gatavot datus testpiemēriem, jo nevarēju likt lietā ierasto Oracle PL/SQL, bet analogas darbības Transact-SQL meklēt bija ļoti laikietilpīgi.

Ne tuvu nav tik daudz dokumentācijas un pieejamas informācijas jo īpaši par SQL noskaņošanu un SQL ieteikumiem.

ASA vs ASE! Ne tikai ASA ir mazāk SQL iespēju, kas būtu vēl saprotami, BET ir CITA sintakse! Darba gaitā tika konstatētas lietas, kas darbojas uz viena servera, bet nedarbojas uz cita – un otrādi. Pēdējā brīdī uzmanības lokā parādījās arī trešais produkts „Sybase IQ”, kas ir kaut kas līdzīgs gan ASA, gan ASE un laikam specializēts priekš datu noliktavām, tāpēc vēl te ir iespējas pētījumiem. Tas ir arī iemesls, kāpēc darba saturs ir tik „saraustīts”. Ja nākošajos gados studentiem būtu uzdevums pētīt Sybase DBVS, tad vispirms vajadzētu apzināt šo serveru atšķirības un nolemt, kurš tad būtu tas pētāmais. Citādi var sanākt tā kā man,

Page 66: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

ka stundām tiek lasīts par kaut kādu funkcionalitāti un mēģināts to iedarbināt, bet beigās izrādās, ka esošā DBVS to nemaz neatbalsta.

Kaut kāda nekonsekvence tajā visā ir, jo vairākos avotos lasīju, ka ASE ir universāla RDBVS, kas ir īpaši labi tiek galā ar OLTP uzdevumiem. ASE tiekot intensīvi izmantots finansiālajā pasaulē (banku, biržu un apdrošināšanas sistēmās) utt., taču manā gadījumā tas neatpazina ne CUBE ne ROLLUP konstrukcijas (uz ASA gan izdevās).

Kopējais mans subjektīvais novērtējums Syabase DBVS ir tāds, ka pelnīti tā nav tik populāra kā Oracle.

Sybase Transact-SQL ir daudz „vājāks” par Oracle PL/SQL. Sybase ASE ir ierobežota trigeru funkcionalitāte, pašā SQL ir daudz mazāk iespēju – maz analītisko funkciju, maz teksta un skaitļu funkciju. Vispār nepastāv XML specifisku apstrādes funkciju (15.0.2 laikam jau kaut kas ir), nav materializēto skatu (ASA tomēr ir), daudz mazāk datu tipu (Pamats šiem apgalvojumiem - skat. „Izmantotie avoti” – 7. avots, bet pieņemu, ka šis tas jau ir mainījies.

Lai gan atkal – iespējams, ja apvieno visu 3 produktu (Adaptive Server Anywhere, Adaptive Server Enterprise un Sybase IQ) funkcionalitāti, tad kopā sanāk diezgan konkurētspējīga DBVS..

Page 67: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Izmantotie avoti

1. Sybase SQL Anywhere (11.0.1) Server – SQL Usage:http://dcx.sybase.com/1101/en/dbusage_en11/dbusage_en11.html

2. Sybase SQL Anywhere Server (12.0.1) - SQL Reference:http://dcx.sybase.com/1201/en/dbreference/dbreference12.htmlhttp://dcx.sybase.com/1200/en/dbreference/select-statement.html

4. Sybase Online Help:

http://infocenter.sybase.com

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc38151.1540/doc/

html/san1278453564119.html - atšķirības Sybase produktos attiecībā uz GROUP BY

5. SQL sintakse:http://www.selectorweb.com/sql_sybase.html

6. Glenn Paulley Blog raksts par SQL Anywhere autonomo statistiku vākšanu:http://iablog.sybase.com/paulley/2010/05/self-healing-statistics-in-sql-anywhere-12/

7. Sybase un Oracle DBVS salīdzinājums (Noderīgi, ja zina Oracle sintaksi, bet nezina Sybase):http://psoug.org/reference/sybase.html

8. Sybase padomi no Rob Vershoor (paskaidro labāk par ražotāju):http://www.sypron.nl/whatis_ase.html - „Ievads Sybase ASE”http://www.sypron.nl/xml.html - XML apstrāde ASE

9. Interesanti viedokļi par Sybase un Oracle konkurējošajām iespējām:http://searchoracle.techtarget.com/tip/Oracle-vs-Sybase-10-reasons-to-use-Sybase-on-Linux

10. Raksts par surogāt-atslēgu lietošanas ietekmi:http://www.sybase.com/detail?id=860

11. Sybase rokasgrāmatas:http://manuals.sybase.com

12. Dažādu RDBVS SQL implementāciju salīdzinājums:http://troels.arvin.dk/db/rdbms/

13. Vispārīgs dažādu RDBVS salīdzinājums:http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

14. Sybase Transact-SQL User’s Guide (Adaptive Server Enterprise 15.0)15. Adaptive Server Anywhere SQL Reference Manual16. Adaptive Server Anywhere SQL User’s Guide

Page 68: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Tulkojumi un saīsinājumi

Nested Loops – Iegultie cikli

Alias – Pieņemtais vārds

SQL Hint – Ieteikums

Statement – Izteiksme (INSERT,UPDATE)

Overhead – Izmaksas/Resursi

Merge – Sapludināt

BULK Insert – Kopu pievienošana

Constraint – Ierobežojums

String – Teksta rinda

Tag - Iezīme

ASA – Adaptive Server Anywhere – SQL Anywhere

ASE – Adaptive Server Enterprise

DML – Data Manipulation Language

DDL – Data Definition Language

Page 69: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

Pielikumi

DWH DLL-- PrecesCREATE TABLE dwh_products (product_id INTEGER UNIQUE,product_name VARCHAR(255),manufacturer_id INTEGER,product_type_id INTEGER);

-- Preču tipiCREATE TABLE dwh_product_types(product_type_id INTEGER UNIQUE,type_name VARCHAR(255));

-- RažotājiCREATE TABLE dwh_manufacturers(manufacturer_id INTEGER UNIQUE,manufacturer_name VARCHAR(255));

-- PiegādātājiCREATE TABLE dwh_suppliers(piegadataja_id INTEGER UNIQUE,piegadataja_nosaukums VARCHAR(255));

-- KlientiCREATE TABLE dwh_customers(klienta_id INTEGER UNIQUE,klienta_nosaukums VARCHAR(255));

-- Klientu grupasCREATE TABLE dwh_customer_types(klienta_grupas_id INTEGER UNIQUE,klienta_grupas_nosaukums VARCHAR(255));

-- VeikaliCREATE TABLE dwh_stores(store_id INTEGER UNIQUE,store_name VARCHAR(255),city_id INTEGER);

-- PilsētasCREATE TABLE dwh_cities(city_id INTEGER UNIQUE,city_name VARCHAR(255),country_id INTEGER);

-- ValstisCREATE TABLE dwh_countries(country_id INTEGER UNIQUE,country_name VARCHAR(255));

-- LaiksCREATE TABLE dwh_time(time_id INTEGER UNIQUE,timeX DATE) -- ASA nevar lietot "time"

-- DienasCREATE TABLE dwh_days(dienas_id INTEGER UNIQUE,dienas_numurs VARCHAR(2),menesa_id INTEGER);

-- MēnešiCREATE TABLE dwh_months(menesa_id INTEGER UNIQUE,menesa_nosaukums VARCHAR(255)); -- Tabulas nosaukumābija drukas kļūda

-- GadiCREATE TABLE dwh_years(gada_id INTEGER UNIQUE,gada_nosaukums VARCHAR(255));

-- Faktu (Centrālātabula)CREATE TABLE dwh_facts (store_id INTEGER ,product_id INTEGER ,time_id INTEGER ,countX INTEGER -- "COUNT":Nevar lietot kākolonnas noaukumu Sybase );

Page 70: Ievads -    Web viewRĪGAS TEHNISKĀ UNIVERSITĀTE. Datorzinātnes un informācijas tehnoloģijas fakultāte „CASE rīki datu bāzu projektēšanā” „SQL konstrukcijas

DWH tabulu sasaiste