[mySQL] Dubbele join met table alias is traag *

Pagina: 1
Acties:

  • djazete
  • Registratie: Juli 1999
  • Laatst online: 07-02-2020
Hallo,
Ik de volgende query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT DISTINCT
    telRek.Datum,
    telRek.Nummer,
    telRek.Bedrag,
    telRek.telRekID,
    calledNumbers.*
FROM 
    telRek LEFT OUTER JOIN calledNumbers ON calledNumbers.checked IS NULL
    RIGHT OUTER JOIN telRek AS t1 ON telRek.Datum = calledNumbers.date
WHERE
    telRek.calledBy = ''
AND
    telRek.begin = '$periodBegin'
ORDER BY
    SUBSTRING(telRek.Datum,4,2), SUBSTRING(telRek.Datum,1,2)

ten eerste, ik ben erg blij dat de query output wat ik wil, na lang klooien.
Het is een beetje een silly verhaal, maar het werkte en ik wilde het optimisen, maar daar heb ik eigenlijk weinig tot geen tijd voor, maar ben toch even op onderzoek uitgegaan.
overigens, het is voor een tooltje om de kpn telefoonrekening automatisch te verdelen en te berekenen in studenten huizen..

dat doe ik als volgt:
men houdt bij welke nummers wanneer gebeld worden
de kpn geeft me een mooie csv input
die worden gematched waar kan
vervolgens wordt met deze query gekeken welke nummers wel gebeld zijn maar nog niet zijn toegekend aan een gebruiker. en hij geeft alle opties (bv door typfouten of iets dergelijsk).

Ik ben dus blij dat het werkt, maar het is gigantisch traag (17 seconden in een met in telRek 420 rows en calledNumbers 260) met indexen op de juiste velden...

Mijn vraag:
ik heb wel vaker gehoord dat mysql en table aliases echt een ramp is.
Nou vraag ik me af, is dit echt zo en hoe zou ik het anders kunnen oplossen..
de mysql user lists geven weinig leuke bruikbare antwoorden terug, dus ik vroeg me af of er hier mensen waren die er wat zinnigs over kunnen zeggen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Die alias zal imho niet zoveel uitmaken.

Wat wel traag is: outer (left/right) joins zijn trager dan gewone inner joins. Als je geen outer joins nodig hebt, gebruik ze dan ook niet.
Heb je indexen gelegd op de nodige columns in je tabellen? Leg indexen op de columns waarop je joined, filtered en ordered.
Verder snap ik je joins ook niet goed eigenlijk.

https://fgheysels.github.io/