Visa ett inlägg
Oläst 2005-01-18, 21:20 #8
Tvartom Tvartom är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 86
Tvartom Tvartom är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 86
Vet inte om jag förstått det hela rätt, men jag tror det ligger till så här:

Följande sats:
Kod:
SQL:
SELECT * FROM tabell1, tabell2 WHERE tabell1.ettfalt = tabell2.annatfalt
generarar alla möjliga kombinationer av tabell1 och tabell2 ihopsatta,
Det vill säga antaletrader blir antalrader(tabell1) * antalrader(tabell2)
Sedan körs WHERE satsen på detta!
Detta gör att stora tabeller snabbt blir långsamma.
Tusen rader i vardera tabell ger en miljon rader att jämföra.
(Med tre tusenraders tabeller blir det en miljard rader...osv)

Använder man istället OUTER JOIN läggs bara den andra tabellens falt till på de funna raderna:
Exempel:
Kod:
SQL:
SELECT * FROM tabell1 LEFT OUTER JOIN tabell2 ON (tabell1.ettfalt = tabell2.annatfalt) WHERE tabel1.falt = ???
och blir således mycket snabbare!

Jag hade skrivet följande:
Kod:
SQL:
SELECT Tabell1.artnr, Tabell1.antal, Tabell2.namn FROM Tabell1 LEFT OUTER JOIN Tabell2 ON Tabell2.artnr = Tabell1.artnr WHERE Tabell1.kundid = 230 ORDER BY Tabell1.artnr
Jag komemr dock inte ihåg helt säker skillnaden på INNER och OUTER i joinsatsen. Nån som kan klargöra?

Med hjälp av OUTER JOIN kan man även göra trevliga räkningar av antal poster med COUNT() och GROUP BY funktionen (Och även få med de som har 0 antal!)
Tvartom är inte uppkopplad   Svara med citatSvara med citat