Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

© PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 1 Bruk og misbruk av SQL DAG HOFTUN KNUTSEN

Liknende presentasjoner


Presentasjon om: "© PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 1 Bruk og misbruk av SQL DAG HOFTUN KNUTSEN"— Utskrift av presentasjonen:

1 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 1 Bruk og misbruk av SQL DAG HOFTUN KNUTSEN

2 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 2 Agenda Generelt om SQL 5 vanlige feil 5 gode tips + Noen nyheter i 2005

3 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 3 Bakgrunn og historikk SQL = Structured Query Language –Misvisende navn: Det er ikke bare query Stammer opprinnelig fra IBM –SystemR i 1976, protoyp som siden ble DB2 –Kritisert for ikke å følge den matematiske teorien godt nok Resultatorientert –Spesifiser ønsket resultat, ikke hvordan resultatet skal produseres Standardisert, benyttes av alle relasjonsdatabaseprodukter –Men alle avviker mer eller mindre fra standarden Transact-SQL –Sybase versjon av SQL fra 1987 –Utvider SQL med prosedyrespråk

4 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 4 Ikke bare “Query” Data Definisjon –CREATE, ALTER, DROP Adgangskontroll –GRANT, REVOKE, DENY Oppdatering –INSERT, UPDATE, DELETE Enkel syntax: Noen få regler –Vanskeligheten er å utnytte kraften i språket på best mulig måte –Vanskelig å verifisere at en setning er logisk korrekt

5 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 5 Aksessmetode SQL: Eneste måte å aksessere tabellene i databasen Klient Server Proc SQL

6 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 6 Enkelt eller komplisert Enkle SQL setninger Leser en rad av gangen, tilsv. fil lesing Klient program gjør mesteparten av jobben kompleksitetsgrad Kompliserte SQL setninger Joins, subqueries, funksjoner, aggregering Server gjør mesteparten av jobben Lett å forstå Lett å konvertere gamle filbaserte system Mindre kode å skrive og vedlikeholde Bedre ytelse Vanligvis dårlig ytelse Kan bli for komplisert for både programmerer og optimizer

7 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 7 Agenda Generelt om SQL 5 vanlige feil 5 gode tips

8 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 8 Feil nr. 1: NULL-verdier Null-verdi i uttrykk –Resultatet blir NULL –Bruk ISNULL eller COALESCE for å gjøre om NULL til ordentlige verdier

9 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 9 NULL-verdi i betingelser –NULL er aldri lik, ulik, større eller mindre enn noenting –NULL-verdier er aldri like, ulike, større eller mindre enn hverandre Feil nr. 1: NULL-verdier

10 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 10 NULL-verdi ved IN og NOT IN –IN “overser” NULL-verdier –En eneste NULL-verdi gjør at NOT IN ikke er oppfylt Feil nr. 1: NULL-verdier

11 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 11 Feil nr. 2: Datamodellen Ikke kjenne betydningen av datamodellen –Tabeller –Kolonner –Primary keys –Foreign keys –Statuskoder

12 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 12 Implisitt datatype konvertering –OrderID har datatype varchar –Implisitt konvertering forhindrer bruk av indeks Feil nr. 3: Datatyper Hvorfor blir resultatet feil?

13 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 13 Tilfeldigvis single-row subquery –Hvem har lik eller lavere lønn enn King? –Setningen er logisk feil, men virker fordi det tilfeldigvis er bare én King Feil nr. 4: Subqueries

14 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 14 Korrelert ved feiltagelse –Kolonnen DivisionName finnes ikke I Employees tabellen og hentes derfor fra Divisions tabellen Problemet unngås hvis kolonnene i subqueries alltid kvalifiseres med tabell prefix Feil nr. 4: Subqueries

15 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 15 Feil nr. 5: OUTER JOIN OUTER JOIN med filterbetingelse “virker ikke” WHERE filter appliseres etter join –INNER og OUTER gir samme resultat

16 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 16 Legg filteret inn i JOIN betingelsen –Da virker OUTER JOIN Feil nr. 5: OUTER JOIN

17 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 17 Agenda Generelt om SQL 5 vanlige feil 5 gode tips

18 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 18 Tip nr. 1: Unngå “tidsinnstilte bomber” Setninger som slutter å virke pga. endringer andre steder i systemet Hva hvis noen gjør ALTER TABLE og legger til en ny kolonne Description i Products tabellen? –Kvalifiser alle kolonner med tabell prefix, også de der det i øyeblikket ikke er strengt nødvendig

19 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 19 Skalarfunksjoner, også kalt radfunksjoner –Eksempel: Beregning av nettopris Tip nr. 2: Utnytt innebygde funksjoner

20 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 20 Beregnet kolonne –Denne beregningen skal sannsynligvis gjentas i mange sammenhenger –Kan defineres en gang for alle som en beregnet kolonne Tip nr. 2: Utnytt innebygde funksjoner

21 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 21 Aggregatfunksjoner, også kalt gruppefunksjoner –Aggregerer flere rader i kildetabellen sammen til en rad i resultatet –Mindre netttrafikk enn om aggregeringen gjøres på klientnivå Tip nr. 2: Utnytt innebygde funksjoner

22 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 22 Matrise rapport –Kombinasjon av CASE og SUM –CASE fordeler på kolonner –SUM aggregerer rader Tip nr. 2: Utnytt innebygde funksjoner

23 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 23 Ny operator for matrise rapporter: PIVOT Gjør implisitt GROUP BY på kolonner som ikke er med i PIVOT klausulen –Inline view (derived table) benyttes for å bli kvitt uønskede kolonner 2005 Tip nr. 2: Utnytt innebygde funksjoner

24 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 24 Window funksjoner, også kalt analytiske funksjoner –Helt ny kategori av funksjoner Konseptuelt utføres disse funksjonene etter at resultatsettet er produsert, men før den endelige ORDER BY –Kjennetegnes ved OVER () klausul Kan spesifisere sortering og/eller partisjonering To hovedkategorier –RANK funksjoner –Aggregatfunksjoner 2005 Tip nr. 2: Utnytt innebygde funksjoner

25 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 25 RANK funksjon –Finnes også DENSE_RANK som ikke hopper over etterfølgende etter like verdier, og ROW_NUMBER som teller uten hensyn til verdi 2005 Tip nr. 2: Utnytt innebygde funksjoner

26 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 26 PARTITION BY deler inn resultatsettet i partisjoner (grupper) –Funksjonen beregnes innenfor hver enkelt gruppe 2005 Tip nr. 2: Utnytt innebygde funksjoner

27 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 27 Blande rad- og gruppeverdier –Tillatt med window funksjon, ikke med “vanlig” aggregatfunksjon 2005 Tip nr. 2: Utnytt innebygde funksjoner

28 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 28 Tip nr. 3: Utnytt joins og subqueries Eksempel: Tabell med romreservasjoner –Problemstilling: Finn konflikterende (overlappende) reservasjoner

29 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 29 Eksempel: Beregning av rangnummer hvis RANK ikke er tilgjengelig Advarsel: –Blir tung hvis tabellen er stor –Alternativ: Tildel rangnummer prosedyrelt Tip nr. 3: Utnytt joins og subqueries

30 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 30 Eksempel: Aggregering i flere nivåer –Aggregatfunksjoner kan ikke nestes i hverandre –Workaround: Subquery i FROM-klausulen Også kalt derived table eller inline-view Tip nr. 4: Splitt og hersk

31 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 31 Et problem kan deles opp i mindre deler –Kan løse ellers uløselige problem –Forenkler programmering –Kan forbedre ytelse Følgende objekter har tabellstruktur og kan brukes til å mellomlagre delresultater –Permanent tabell –Temporær tabell –Derived table (inline view) –Common table expression (CTE) (Ny i 2005) –Lagret view –Indeksert view –Tabell variabel –Tabell funksjon Alle disse kan leses som tabeller og kan benyttes og kombineres i queries –Enkle SELECT-setninger, JOIN, UNION, Subqueries etc. –De har ulike egenskaper og er derfor egnet i ulike situasjoner Tip nr. 4: Splitt og hersk

32 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 32 Common Table Expression, også kalt “factored subquery” –Mellomting mellom view og derived table –Defineres før SELECT i egen WITH klausul –Nyttig hvis view-et skal gjenbrukes flere ganger i samme setning 2005 Tip nr. 4: Splitt og hersk

33 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 33 Rekursiv Common Table Expression En CTE kan referere til seg selv rekursivt Må bestå av to deler –En ikke-rekursiv SELECT kalt anchor member –En rekursiv SELECT De to er koblet sammen med UNION ALL –Andre mengdeoperatorer er ikke tillatt 2005

34 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 34 Hierarkier Rekursiv CTE er spesielt nyttig for å håndtere hierarkier 2005

35 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 35 Hierarkier Vi vil ha hierarkiet presentert slik: 2005 ID: 2 Fuller ID: 4 Peacock ReportsTo:2 ID: 3 Leverling ReportsTo:2 ID: 1 Davolio ReportsTo:2 ID: 5 Buchanan ReportsTo:2 ID: 8 Callahan ReportsTo:2 ID: 6 Suyama ReportsTo:5 ID: 7 King ReportsTo:5 ID: 9 Dodsworth ReportsTo:5 Level 1 Level 2 Level 3

36 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 36 Rekursiv CTE eksempel 2005 Anchor member Recursive member Starting point

37 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 37 Tip nr. 5: Eksekveringsplaner Sjekk eksekveringsplanene for ulike alternative løsninger –SQL er et resultatorientert språk som beskriver ønsket resultat, ikke hvordan resultatet skal produseres –Optimereren er den del av SQL-oversetteren som finner ut hvordan, og forsøker å gjøre det mest mulig effektivt Vanskelig å forutsi hva optimereren vil gjøre –Eksekveringsplanen viser hvordan optimereren vil utføre setningen –Indeksbruk, join strategi etc

38 © PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 38 Oppsummering Det er god grunn til å sette seg grundig inn i mulighetene i SQL –Utnytte kraften i språket, men uten å overdrive –Unngå feller og problemer –Oppnå god ytelse DAG HOFTUN KNUTSEN


Laste ned ppt "© PROGRAM UTVIKLING as Dag Hoftun Knutsen: SQL - side 1 Bruk og misbruk av SQL DAG HOFTUN KNUTSEN"

Liknende presentasjoner


Annonser fra Google