SQL ohjelmoijan muistilista DB2 v7



Samankaltaiset tiedostot
1. Käytä muuttujalle ja literaalille sarakkeen tietomuotoa ja pituutta.

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

OUTER JOIN se vanha kunnon kaveri

SELECT-lauseen perusmuoto

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

Näkymät ja hakemistot

TIEDONHALLINTA - SYKSY Luento 10. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Liitokset - haut useaan tauluun

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

SQL - STRUCTURED QUERY LANGUAGE

Koostefunktiot. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

HELIA 1 (14) Outi Virkki Tiedonhallinta

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

Kyselyn yleisrakenne:

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Makrojen mystinen maailma lyhyt oppimäärä

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

String-vertailusta ja Scannerin käytöstä (1/2) String-vertailusta ja Scannerin käytöstä (2/2) Luentoesimerkki 4.1

Taulukkolaskenta II. Taulukkolaskennan edistyneempiä piirteitä

Opiskeluoikeuksien maaran tiedonkeruu

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely

Lisää segmenttipuusta

HELIA 1 (14) Outi Virkki Tiedonhallinta

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

HELIA TIKO-05 1 (15) ICT03D Tieto ja tiedon varastointi Räty, Virkki

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto. Opettajien nimet: Opiskelijoiden pääaineet

Joko tunnet nämän Oracle10g SQL:n piirteet? Kari Aalto Saariston IT

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto.

HELIA 1 (15) Outi Virkki Tiedonhallinta

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 SQL:n perusteet. Harri Laine 1. SQL tietokantakieli. SQL tietokantakieli

Yleinen SQL. Yleinen SQL. SQL:n kehitys

Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, tentin päiväys, oma nimesi, syntymäaikasi ja nimikirjoituksesi.

CSE-A1200 Tietokannat

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

Virta_Latausraportti - Tarkistukset

Ohjelmoinnin perusteet Y Python

KOOSTEFUNKTIOT. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

Tällä viikolla. Kotitehtävien tarkistus Upotettu SQL Indeksi-harjoitus täydennetään pelifirman tietokantamallia SQL-tehtäviä

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

HELIA SQL-harjoituksia 1(1) atk72d Versiopvm:

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Relaation tyhjyyden testaaminen

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely

Käyttöjärjestelmät: Virtuaalimuisti

Näkymät ja tiedon suojaus

ABT 2000kg Haarukkavaunun käyttöohje

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Esimerkki. pankkien talletus- ja lainatietokanta: Yhdiste, leikkaus, erotus ym. Leikkaus (intersect) Yhdiste (Union) Erotus (except/minus) Leikkaus

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 SQL-perusteet. Harri Laine 1. SQL tietokantakieli

L2TP LAN to LAN - yhteys kahden laitteen välille

4.1 Yleistä SQL:stä 4.2 SQL-lauseet 4.3 DML: datan hallinta 4.4 DDL: rakenteen määrittäminen 4.5 DCL: valtuuttaminen 4.6 TxCL: tapahtumanhallinta

Yhdiste, leikkaus, erotus ym.

Asteri Kirjanpito Dos ALV% nousu 1 %-yksiköllä Vuosipäivitys

SQL:N PERUSTEET MARKKU SUNI

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

EXELON -depotlaastarin KÄYTTÖOHJEET JA LÄÄKITYSPÄIVÄKIRJA

Hae Opiskelija käyttöohje

2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstname ASC;

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

EXEC SQL BEGIN DECLARE SECTION

DB2-YTR 1 (16) Tietokantojen suunnittelun pienryhmä DB2-tietokantasuunnittelu

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Ohjelmoinnin perusteet Y Python

Matematiikan tukikurssi 3.4.

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

D B. Tietokannan hallinta - kurssin tavoite. Kurssilla opitaan periaatteet. Edellytyksenä osallistumiselle on Tietokantojen perusteiden hallinta

CSE-A1200 Tietokannat

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

VINKKI: Katso Kentät Muistioon -painikkeella, mikä on taulukon nimen oikea kirjoitusasu.

17 BUDJETOINTI. Asiakaskohtainen Budjetti Ylläpito-ohjelma. Dafo Versio 10 BUDJETOINTI. Käyttöohje. BudgCust Yleistä

Luento 5. Timo Savola. 28. huhtikuuta 2006

Metropolia ammattikorkeakoulu TU00BS : ICT-teknologiaosaaminen Tuntitehtävät 5 Pasi Ranne

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokantaohjelmointi Harri Laine 1. SQL:n käyttö ohjelmissa

Excel pivot. Mihin ja milloin pivot:ia voi käyttää

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

P-Frami sopimusasiakkaan käyttöohje

SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito

Transkriptio:

Työryhmä SQL ohjelmoijan muistilista DB2 v7 Tuovi Henttu, Osuuspankki Ville Hurmalainen, Pohjola Anne Lesell, IBM Sinikka Mononen, Octel Minna Nurmela, Kela Paavo Tukia, Octel 15.9.2005 Sudenkuoppalista DB2 v7 1

SQL ohjelmoijan muistilista DB2 v7 1. Yllättävät saantipolut 2. Turhat lajittelut 3. CPU-ajan säästö 4. Turvallisuus 5. Selkeys ja ylläpidettävyys 6. Lukitukset 7. Yllättävät tulokset 8. Hajautettu ympäristö 9. Data Sharing 10.Stored Procedures 11.LOBit 12.Runstats-ohje /Joinit 13.XML 15.9.2005 Sudenkuoppalista DB2 v7 2

1. Yllättävät saantipolut (1) 1. Muuttujien ja sarakkeiden tietomuodon tulee vastata sarakkeen tietomuotoa 2. Vältä skalaarifunktioita WHERE ehdossa kentissä joita käytetään haussa 3. Vältä laskemista WHERE lausekkeessa 4. Ehtopari >=, <= verrattaessa muuttujaa kahteen sarakkeeseen 5. Vältä negaatiota haussa käytettäville sarakkeille 6. Alikyselyssä kirjoitustapa määrää suoritustavan ja -järjestyksen 7. FETCH FIRST n ROWS ja OPTIMIZE FOR n ROWS tehostavat hakupolkua pienillä aineistoilla 15.9.2005 Sudenkuoppalista DB2 v7 3

1. Yllättävät saantipolut (2) 8. OR, jota ei voi esittää IN listana, aiheuttaa aina vähintään MIA hakupolun. 9. Yhden rivin haussa INDEX ONLY voidaan saada laittamalla hakuun sarakefunktio. 10.Tarkista MIN ja MAX funktioiden hakupolku EXPLAINilla. 11.NOT NULL-saraketta verrattaessa sarakkeeseen, jossa NULLsallittu, käytä COALESCE funktiota. löytyy myös IFNULL funktio 12.Älä tutki isäntämuuttujien arvoja WHERE lausekkeella. 13.Älä turhaan käytä COALESCE funktiota, jos NULL ei sallittu 14.Jos taulujärjestys JOIN lausekkeessa vaihtelee, tarkempi statistiikka indeksisarakkeille voi auttaa. 15.9.2005 Sudenkuoppalista DB2 v7 4

Yllättävät saantipolut / Isäntämuuttujan arvon tutkiminen WHERE lausekkeella? Miksi ihmeessä joku tutkisi SQL:llä muuttujaa? "kätevä" tapa rakentaa "yleiskäyttöisiä" SQLlauseita vastaa Javan ns. NULL ehtolauseketta eli ehto/ehdon osa voidaan kääntää pois käytöstä. Tuottaa takuuvarmasti huonon hakupolun SELECT... FROM AGREEMENT WHERE START_DATE < :hv3 AND ( APPR_FLAG = 'VOIM' AND AMT > 15000 AND CLAIMS > 10 OR :hv2 = 'RISKIVAK') AND ( AMT < 1000 OR :hv2 = 'PIENVAK') ; 15.9.2005 Sudenkuoppalista DB2 v7 5

2. Turhat lajittelut 1. Käytä ORDER BY listassa hakemiston järjestystä 2. Jos indeksit EIVÄT tue lajittelujärjestystä, rivit lajitellaan tilapäistaulukkoon. 3. Vältä DISTINCT määreen käyttöä. Kokeile, saatko GROUP BY:lla paremmat hakupolut. 4. Käytä UNION ALL lauseketta, ellet tarvitse duplikaattien poistoa. 5. Lajiteltaessa JOIN tulosta, jossa lajittelutekijät kohdistuvat useaan tauluun, voi syntyä ylimääräinen lajittelu. 15.9.2005 Sudenkuoppalista DB2 v7 6

3. CPU ajan säästö 1. LOAD apuohjelman käyttö säästää 2. Jokerimerkit (%, _) LIKE ehdon ensimmäisenä merkkinä sulkee pois MIS saantipolun. 3. Määrittele kohdistin eräajoissa WITH HOLD optiolla. 4. Olemassaolon tarkistus: FETCH FIRST ROW ONLY määreellä. 5. SELECT lauseeseen vain ne sarakkeet, joiden tietoa tarvitset. WHERE ehtojen sarakkeita ei pidä turhaan toistaa. 6. Vältä UPDATE lauseessa tietoarvoltaan muuttumattomien sarakkeiden luetteleminen. 7. Vältä turhien SQL-lauseiden suorittamista. 8. CPU:n käyttö oikeaan paikkaan, ohjelma / SQL. 15.9.2005 Sudenkuoppalista DB2 v7 7

CPU ajan säästö / LOAD apuohjelma Jos tarve 24/7 käytölle, niin ratkaisu on LOAD RESUME YES SHRLEVEL CHANGE. Tällöin Taulua voi käyttää samalla (ei estä muiden sovellusohjelmien suoritusta kuten normaali LOAD) toimii kuten SQL INSERT lausein tehty ohjelma säilyttää cluster-järjestyksen lisäykset menevät lokille (Log no mahdoton) viite-eheys tarkastetaan samalla (enforce no mahdoton) lisäksi INSERT-triggerit laukeavat 15.9.2005 Sudenkuoppalista DB2 v7 8

4. Turvallisuus 1. Käytä rivien päivityksessä ja poistossa kohdistinta. Suora käyttö vain jos perusavain tunnetaan. 2. Jos käytät näkymän määrittelyssä WHERE ehtoja ja näkymää käytetään rivien päivitykseen / lisäykseen, määrittele näkymä WITH CHECK OPTION määreellä. 3. Tarkasta aina SQLCODE SQL-lauseen jälkeen. 15.9.2005 Sudenkuoppalista DB2 v7 9

5. Selkeys ja ylläpidettävyys 1. Älä käytä SELECT * lausetta. 2. SELECT lauseeseen vain ne sarakkeet, joita todella tarvitset. 3. INSERT lauseeseen näkymän sarakkeet, joihin viet tietoa. 4. Määrittele FOR UPDATE OF sarakelistaan vain ne sarakkeet, joita aiot päivittää. Jos rivejä poistetaan, luettele perusavaimen sarakkeet. 5. Käytä mieluummin IN listaa usean OR ehdon sijaan. 6. Käytä isäntämuuttujina DCLGEN -struktuureja. 7. Luettele ORDER BY sarakelistassa sarakkeet nimeltä. 8. Sarakkeen nimen on hyvä olla kuvaava, kommentoi sekä anna otsakenimi (LABEL) kullekin sarakkeelle. Kun käytät samasta tiedosta aina samaa nimeä, DB2-katalogi toimii tietohakemistona. 15.9.2005 Sudenkuoppalista DB2 v7 10

6. Lukitukset 1. LUKEVAN kursorin kohteena olevien taulujen suora päivittäminen samassa yhteydessä (UOW) voi häiritä kursorin etenemistä. [eli ns. kengurukursoori] 2. Päiväeräohjelmissa voi deadlock- ja timeout-paluukoodin jälkeen (-911) harkita kesken jääneen LUW:n suoritusta uudelleen muutamia kertoja. 3. Määrittele kohdistin FOR FETCH ONLY, jos rivejä luetaan. 4. Lukevissa ohjelmissa harkitse UR-optiota (riski: epäyhtenäinen tulos). 5. Tee commit eräohjelmassa 2-5 sekunnin välein. 6. Sensitiivinen scrollable kursori pitää lukot koko suoritusajan ohjelman commitista huolimatta. 15.9.2005 Sudenkuoppalista DB2 v7 11

7. Yllättävät tulokset 1. Käytä ORDER BY määrettä aina, ja vain silloin, kun tulosjoukko halutaan tietyssä järjestyksessä. 2. Varo väärää päätelmää sarake-funktioiden luvusta. jos ehto jää toteutumatta, SQLCODE = 0 ja arvo on NULL 3. NULL arvoon löytyy vain ehdolla IS NULL, eikä millään muulla ehdolla. Kaikista muista kyselyistä rivi jää huomioimatta. 4. Ole varovainen WHERE ehtojen kanssa ulkoliitoksen yhteydessä. 15.9.2005 Sudenkuoppalista DB2 v7 12

8. Hajautettu ympäristö 1. OPTIMIZE FOR N ROWS vaikuttaa tietoliikenneblokin kokoon. 2. Käytä hajautetussa ympäristössä kohdistimen määrityslauseessa FOR FETCH ONLY määrettä, jos rivejä aiotaan vain lukea. 15.9.2005 Sudenkuoppalista DB2 v7 13

9. Data Sharing 1. Commit-väli & LOCK AVOIDANCE optio. 2. Ohjelman suunnittelu: hyvä ei riitä, pitää olla loistava. Tiiviit tietokantakäsittelylohkot (compound block). 3. Käytä ehdottomasti LOCK AVOIDANCE optiota, vaikutus tuntuu paljon laajemmin käydessään kaikkien koneiden läpi. 15.9.2005 Sudenkuoppalista DB2 v7 14

10. Stored Procedures 1. Huomioi, että kutsuttaessa CICS tapahtumasta stored procedurea, tapahtuu osoitetilan vaihto. 2. Harkitse, kannattaako sallia stored procedurien kutsu eräohjelmista. 3. Ohjelman kutsun (CALL) ja stored proc kutsun CPU kulutuksen ero suuri (jopa 10-kertainen). 15.9.2005 Sudenkuoppalista DB2 v7 15

Muut 1. Perustauluun ei määritellä lob-saraketta. LOBista tehdään 1:1- liitos perustauluun huoltotoimet hoituvat selailussa LOB esille vain tarvittaessa varchar vs LOB LOB ei kirjaannu lokille varchar ei tehokas, eikä kuultu mitään hyvää 2. Runstats-ohje /Joinit - lähinnä V8 teho-ongelmia 3. XML - vasta V8 ohjeisiin 15.9.2005 Sudenkuoppalista DB2 v7 16