Avatar billede razmuz_dk Nybegynder
11. august 2006 - 17:57 Der er 6 kommentarer og
1 løsning

LEFT JOIN kun hvis

Jeg har en tabel med brugere, som via kolonne group_id er knyttet til en gruppe. Nogle brugere har dog ingen gruppe - de har group_id = '0'.

Når jeg selecter en brugers profil gør jeg sådan
SELECT
  u.name,
  u.age
  [...]
FROM users u
LEFT JOIN groups g ON g.group_id = u.group_id
WHERE u.user_id = '$user_id'

Med andre søger mysql i groups-tabellen selvom u.group_id = '0'. Det er dumt, fordi det behøver den ikke - HVIS u.group_id = '0' behøver den ikke slå op i group-tabellen.

Kan man få mysql til at lade være med at LEFT JOIN'e hvis u.group_id = '0' uden at splitte kaldene op?

På forhånd tak.
- Rasmus
Avatar billede erikjacobsen Ekspert
11. august 2006 - 18:01 #1
Hvorfor interesserer det dig? Mener du det kører for langsomt?

g.group_id er vel en fremmednøgle med index - og så tror jeg ikke du sparer mere end et split-nanosekund ved at gøre det mere bøvlet for dig selv :)
Avatar billede razmuz_dk Nybegynder
11. august 2006 - 18:13 #2
Det er kun af performance-mæssige årsager jeg spørger. Jeg er godt klar over, det ikke sparer mig meget - men nu har jeg brugt ovenstående princip de sidste par år og hver eneste gang tænkt på om det KUNNE gøres bedre... i dag tænkte jeg: "Nu vil jeg altså have svar på om det kan gøres mere optimalt" :)

Men det indikerer din kommentar, at det ikke kan? :-)
Avatar billede razmuz_dk Nybegynder
11. august 2006 - 18:15 #3
... og ja, det er naturligvis et index :)

Så vidt jeg ved anvender mysql b-tree indexes på sådanne tal-kolonner. Derfor starter den også med at søge på det "midterste tal" - altså ikke "0".... hvilket også en grund til jeg har tænkt over, jeg måske kan forbedre performance'n lidt :)
Avatar billede erikjacobsen Ekspert
11. august 2006 - 18:19 #4
Og om den så starter i midten, så er indexet nok cached mens den laver den join.
Mål selv: hvor lang tid tager den du har nu, mod at gøre det i 2 selecter?  Du kan ikke angive at du ikke vil lave join under visse betingelser, med mindre du slet ikke vil have felterne med.

Og så er det almindelig kendt at man kun skal bekymre sig om optimering, hvis, og kun hvis, man observerer et problem eller en flaskehals.
Avatar billede razmuz_dk Nybegynder
06. september 2006 - 13:27 #5
...

Okay tak for rådene :) Smid et svar.
Avatar billede erikjacobsen Ekspert
06. september 2006 - 17:03 #6
Jeg samler slet ikke på point, tak.
Avatar billede razmuz_dk Nybegynder
06. september 2006 - 18:20 #7
Okay så :)
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

IT-JOB