Microsoft Access optimaliseren bij het gebruik van ODBC-gegevensbronnen

Geavanceerd: vereist professionele codering, interoperabiliteit en vaardigheden voor meerdere gebruikers.

Dit artikel is alleen van toepassing op een Microsoft Access-database (.mdb of .accdb).

Samenvatting

In dit artikel worden verschillende tips beschreven voor het verbeteren van de prestaties wanneer u gegevens uit een ODBC-gegevensbron opent.

Meer informatie

Gebruik de volgende tips om de prestaties met ODBC-gegevensbronnen te verbeteren:

  • Beperk de hoeveelheid gegevens die u opvraagt bij de server. Vraag niet om meer gegevens dan u nodig hebt. Gebruik query's om alleen de velden en rijen te selecteren die u nodig hebt.

  • Gebruik alleen de functionaliteit die u nodig hebt. Momentopnamen zijn minder krachtig dan dynasets en kunnen niet worden bijgewerkt. Momentopnamen kunnen echter sneller zijn, met name voor kleine recordsets zonder memo- of OLE-objectvelden.

  • Maak gekoppelde (gekoppelde) tabellen voor toegang tot servergegevens. Vermijd 'directe' servertoegang (open geen externe databases en voer er query's op uit). Maak in plaats daarvan gekoppelde tabellen of maak passthrough-query's.

  • Ontwerp keuzelijsten en keuzelijsten met invoervak verstandig. Op een formulier is voor elke keuzelijst, keuzelijst met invoervak, subformulier en besturingselement met een totaal een afzonderlijke query vereist. Voor lokale gegevens zijn de prestaties mogelijk voldoende. Voor externe gegevens kunnen echter lange vertragingen optreden wanneer u een formulier opent, omdat elke query naar de server moet worden verzonden en een antwoord moet worden geretourneerd voordat het formulier kan worden geopend.

  • Vermijd grote keuzelijsten met invoervak. Het toevoegen van een keuzelijst met invoervak met honderden of zelfs duizenden keuzen op basis van een lokale tabel kan een acceptabele reactietijd opleveren, met name als u een geschikte index voor de lokale tabel definieert. Bij een externe tabel levert een dergelijke keuzelijst met invoervak echter trage prestaties op omdat deze server- en netwerkbronnen leegloopt wanneer er gegevens worden opgehaald om de lijst te vullen. U kunt het beste het aantal rijen beperken dat wordt geretourneerd naar de keuzelijst met invoervak wanneer u met externe gegevens werkt. U kunt de gegevens ook opsplitsen in kleinere keuzelijsten met invoervak (rekening houdend met de bovenstaande tip).

  • Gebruik de opdracht Zoeken alleen voor kleinere recordsets. De Microsoft Jet-database-engine optimaliseert de opdracht Find om goed te werken met lokale recordsets van vrijwel elke grootte en voor externe recordsets van redelijke grootte. Wanneer u echter grote externe recordsets hebt (duizenden records of meer), moet u in plaats daarvan een filter of query maken en ook voorzichtig zijn met het gebruik van beperkingen die uw server kan verwerken.

  • Zorg ervoor dat query's voor verwerking naar de server worden verzonden. De belangrijkste factor bij queryprestaties voor externe gegevens is ervoor te zorgen dat uw server zoveel mogelijk query's uitvoert. De Microsoft Jet-database-engine probeert de hele query naar uw server te verzenden, maar evalueert lokaal queryclausules en -expressies die over het algemeen niet worden ondersteund door servers of uw specifieke server. De functionaliteit die niet wordt ondersteund door servers in het algemeen, omvat het volgende:

  • Bewerkingen die niet kunnen worden uitgedrukt in één SQL-instructie. Deze situatie kan optreden wanneer u een query gebruikt als invoer voor een andere query, of wanneer de FROM-component van uw query een totalenquery of DISTINCT-query bevat. Vaak kunt u uw query's opnieuw rangschikken om totalen te berekenen na alle andere bewerkingen.

    • Bewerkingen die microsoft Jet-database engine-specifieke extensies voor SQL zijn, zoals kruistabelquery's, TOP-query's en rapporten met meerdere niveaus van groepering en totalen. Houd er rekening mee dat eenvoudige kruistabelquery's naar servers kunnen worden verzonden.
    • Expressies die microsoft Access-specifieke operators of functies bevatten. De financiële functies en statistische aggregaties van Microsoft Access hebben geen serverequivalenten.
    • Door de gebruiker gedefinieerde Visual Basic for Application-functies die externe kolommen als argumenten gebruiken. Deze functies bestaan niet op de server, maar moeten externe kolomgegevens verwerken. Als een door de gebruiker gedefinieerde functie echter één waarde retourneert en niet verwijst naar een externe kolom, wordt de functie lokaal geëvalueerd en wordt de waarde naar de server verzonden voor verwerking.
    • Tekst en numerieke gegevenstypen combineren in operators of UNION-query-uitvoer. De meeste servers hebben niet de gegevenstype-clementie van Microsoft Access. Gebruik daarom waar nodig expliciete conversiefuncties.
    • Heterogene joins tussen lokale tabellen en externe tabellen, of tussen externe tabellen in verschillende ODBC-gegevensbronnen. Joins tussen kleine lokale tabellen en grote externe tabellen, waarbij de joinkolom wordt geïndexeerd, kunnen leiden tot een externe indexkoppeling. In een externe indexdeelname wordt één query voor elke rij in de lokale tabel naar de server verzonden en worden alleen de samenvoegrijen geretourneerd.
    • Niet-externe expressies of expressies die niet op afstand kunnen worden verzonden, omdat ze niet door uw server kunnen worden geëvalueerd. Niet-externe uitvoerexpressies (die in de SELECT-component) dwingen lokale evaluatie van uw query niet af, tenzij ze voorkomen in een totalenquery, een DISTINCT-query of een UNION-query. Niet-externe expressies in andere componenten (WHERE, ORDER BY, GROUP BY, HAVING, enzovoort) dwingen ten minste een deel van uw query lokaal te worden geëvalueerd.
  • Servers verschillen op sommige gebieden van ondersteunde functionaliteit. Wanneer u een externe tabel koppelt, vraagt de Microsoft Jet-database-engine het ODBC-stuurprogramma op voor de mogelijkheden ervan. Als de vereiste functionaliteit wordt ondersteund door het stuurprogramma en de server, verzendt de Microsoft Jet-database-engine de bewerking naar de server voor verwerking. Zo niet, dan voert de Microsoft Jet-database-engine de bewerking lokaal uit. Verschillende ondersteuningsgebieden omvatten (maar zijn niet beperkt tot) het volgende:

    • Outer joins. Houd er rekening mee dat de Microsoft Jet-database-engine niet meerdere outer joins naar een server verzendt, hoewel veel inner joins mogelijk vergezeld gaan van één outer join.
    • Numerieke functies, tekenreeksen en datum/tijd, zoals Log(), Mid$(), DatePart() enzovoort.
    • Conversiefuncties, zoals CInt(), CStr(), CVDate(), enzovoort.