Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Access 2000-->2007] query traag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Sinds een aantal weken zijn we overgeschakeld van access 2000 naar 2007. Dit gaf geen problemen, behalve voor één query die heel traag geworden is.

Het schema van de query ziet er als volgt uit (met tussen haakjes het aantal records per tabel):

tbl_Main.Vendor ------> tbl_A.Vendor (240000)
   (24000)      ------> tbl_B.Vendor (35000)
                ------> tbl_C.Vendor (37000)


SQL:
1
2
3
SELECT tbl_Main.Vendor
FROM ((tbl_Main LEFT JOIN tbl_A ON tbl_Main.Vendor = tbl_A.Vendor) LEFT JOIN tbl_B ON tbl_Main.Vendor = tbl_B.Vendor) LEFT JOIN tbl_C ON tbl_Main.Vendor = tbl_C.Vendor
WHERE tbl_Main.Vendor Is Not Null AND tbl_A.Vendor Is Null AND tbl_B.Vendor Is Null AND tbl_C.Vendor Is Null;


Na een tiental minuten is de query eindelijk uitgevoerd met een resultaat van ongeveer 6300 records.

De database staat lokaal, dus er treedt geen vertraging op door een eventueel traag netwerk.
Opslaan als accdb ipv mdb maakt geen verschil in snelheid, evenals het toevoegen van indexen op de "Vendor"-velden.

Heeft er iemand een idee om de query terug sneller te maken ?

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Herschrijf hem eens met IN, dus iets als
SQL:
1
2
SELECT Vendor FROM tbl_Main 
    WHERE (NOT (Vendor IN (SELECT Vendor FROM tbl_A))) AND ...

Of kijk eens met showplan aan.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 31-05 13:43
Inderdaad iets met IN herschrijven zal een stuk verbetering opleveren.

Doordat je nu twee keer een LEFT JOIN doet, zal de query voor elk record in Main een JOIN doen met A en een JOIN doen met B en die weer joinen met C, dus krijg je 240000 * 35000 * 37000 records terug; dat kan wel even duren ja. Met een INNER JOIN of een WHERE NOT IN (SELECT Vender FROM tbl_A...) krijg je er maximaal 240000 terug