11. august 2006 - 17:57Der 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?
I et inbound callcenter, hvor identiteten på den, der ringer ind, skal bekræftes, kan kontrollen nu foregå i telefonkøen. Det understøtter fem centrale KPI'er for callcentre.
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? :-)
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 :)
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.
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.