Avatar billede carstensuurland Nybegynder
04. juli 2005 - 11:14 Der er 5 kommentarer og
1 løsning

Performance: Joins vs. felt i tabel

Hejsa

Vi har i afdelingen en mindre diskution kørende omkring den performancepris man betaler i forbindelse med SQL Joins.

Lad os antage følgende:
Én tabel har oplysninger omkring et 'dokument' - Nogle dokumenter har et resume tilknyttet, andre har ikke.

Normaliseringsreglerne siger nu, at der skal oprettes en tabel til disse resuméer (da de ikke altid er <> null), hvorefter man så joiner de to tabeller på f.eks DocumentID.

Mine spørgsmål:
Hvad koster denne JOIN? Er den gratis grundet indexer eller hvad? Og hvis den er gratis, kan man så bare dele sin database op i tusindvis af tabeller og joine på kryds og tværs uden performancetab (forudsat at de korrekte indexer er oprettet).

/Carsten
Avatar billede arne_v Ekspert
04. juli 2005 - 12:01 #1
som jeg husker normaliserings reglerne er der ikke noget krav om at
felter som kan indeholde skal ud i en anden tabel !

database performance er et meget meget komplekst emne, generelt siger man
at en JOIN uden index er meget dyr og at en JOIN med index koster en
lille smule, men hvis du skal vide det med sikkerhed skal du ind
og sammenligne eksekverings planer og teste med forskellige løsninger
Avatar billede carstensuurland Nybegynder
04. juli 2005 - 17:27 #2
Hej Arne
Den er god nok... Hvis et felt kan indeholde nullværdier, skal denne værdi trækkes u di en særskilt tabel med en kopi af primærnøglen. (jeg mener det er 2. normalform)
Avatar billede gefion Nybegynder
05. juli 2005 - 14:51 #4
JA det kan man - du kan oprette alle de tabeller du vil (jo flere jo bedre faktisk)
bare du husker at give em et godt index.

det er meget vigtigt at du laver dit sqltræk korret - så koster det bestemt ikke performance tvært i mod det øger hastigheden.

fidusen er at din selectsætning skal se således ud:

To tabeller eks tab1 og tab2  den mindste tabel(færrest datarækker i) skal placeres sidst i from sætningen tab1 er i dette eks. den mindste.

ex: select tab1.felt1, tab1.felt2, tab2.felt1 .....
FROM tab2,tab1
where ....

VIGTIGT indexfelter SKAL indgå i select og helst også i JOINS så taber du ikke performance.

Fidus: når du skal bruge en foresp. tit så lav den som et view det øger yderligere performance.

brug CREATE view.....
Avatar billede arne_v Ekspert
05. juli 2005 - 19:56 #5
flere tabeller er ikke nødvendigvis bedre

normalisering og joins vil i de fleste tilfælde koste en lille smule
i performance men sikrer konsistente data

det er ligemeget om der er index på select felter medmindre der skal sorteres
efter dem

det er derimod så godt som altid vigtigt at der er index på felter som indgår
i ON og WHERE betingelser

og det ville undre mig hvis query optimizeren lader sig påvirke af tabellernes
rækkefølge i FROM
Avatar billede gefion Nybegynder
06. juli 2005 - 17:48 #6
Jeg har arbejdet proffessionelt med Oracle databaser i 20 år, og ved at DE ikke er ligeglade med i hvilken rækkefølge tabellerne i FROM tages.

Det er rigtigt at i ON og Where skal der anvendes index

Ved at starte med den mindste tabel (læses bag fra i Where og ON) øges hastigheden mærkbart. (under forudsætning af at der er index.)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester