Ik heb een vrij uitgebreide query onder andere bestaande uit 14 left joins. De query doet er ongeveer 4 seconden over, waarbij het resultaat ongeveer uit 2500 records bestaat. Dit is op zich redelijk acceptabel voor mijn geval.
Echter een LEFT JOIN gooit roet in het eten. Hierbij wordt een tabel op twee andere tabellen gejoined. Deze join levert de correcte resultaten op met een OR-conditie, alleen doet de totale query er dan ongeveer 30 seconden over. Wanneer ik hier 'voor de gein' AND van maak duurt de query dus slechts 4 seconden (maar levert uiteraard de verkeerde resultaten op).
Dit heeft o.a. te maken met de index. Bij een AND conditie wordt er wel gebruik gemaakt van de vastgelegde indices en bij OR heeft MySQL daar geen profijt van. Hoe zou ik dit probleem kunnen tackelen?
Voor de duidelijkheid het relevante deel van de query:
Echter een LEFT JOIN gooit roet in het eten. Hierbij wordt een tabel op twee andere tabellen gejoined. Deze join levert de correcte resultaten op met een OR-conditie, alleen doet de totale query er dan ongeveer 30 seconden over. Wanneer ik hier 'voor de gein' AND van maak duurt de query dus slechts 4 seconden (maar levert uiteraard de verkeerde resultaten op).
Dit heeft o.a. te maken met de index. Bij een AND conditie wordt er wel gebruik gemaakt van de vastgelegde indices en bij OR heeft MySQL daar geen profijt van. Hoe zou ik dit probleem kunnen tackelen?
Voor de duidelijkheid het relevante deel van de query:
code:
1
2
3
4
5
| ... LEFT JOIN tblProgramProductBid progprodbid ON (progprodbid.ProgramProductId = progprods.ProgramProductId OR tblLastSubProgramBid.SubProgramCompanyBidId = progprodbid.SubProgramCompanyBidId) ... |
