Mycket flitig postare
|
|
Reg.datum: Oct 2004
Inlägg: 898
|
|
Mycket flitig postare
Reg.datum: Oct 2004
Inlägg: 898
|
Ang OR, OUTER JOIN och UNION:
Alla dessa konstruktioner suger. OR är alltid dåligt. Sannolikheten för en tablescan är nära 1. Har faktiskt aldrig testat just det med en outer join (eller "IN" heller för den delen), men även OUTER JOINs är elaka och bör undvikas. Problemet med UNION är lite mindre dels då den kommer gå igenom inte hela tabellen utan bara det temporära resultatet och även denna overhead kan minimeras med "UNION ALL" om man vet att inga dubletter finns (vilket ju är fallet här, så UNION ALL borde det vara).
vad som är mest segt OR eller OUTER JOIN är i sammanhanget egentligen ointressant då resultatet inte är det samma. Det är två helt skilda konstruktioner med olika syften. Den intressanta jämförelsen är "OR vs IN"
Ang hur du borde designat:
Objektorientering är nyckelordet tror jag. Du ska ha en bastabell (AdvertiseList) med ALLA gemensamma fält. Header och Price är ju gemensamma fält och borde inte funnits i resp. undertabeller.
Sedan kan du skapa utökningar av din bastabell med det specialiserade datat.
Då "borde" du ha ett läge där du i varje given fråga inte behöver blanda in mer än bastabellen och en "barntabell". Om du ändå måste det så slutar det med flera frågor eller hemska outer joins. I alla fall om man ska vara flexibel.
Om antalet "extra" kolumner är relativt få (till antal och datatyp) så skulel jag nog fundera på att ha allt i samma tabell och ha generella kolumner för extra datat givet att jag vill välja ut extradata från flera olika typer av "barn"
|