Access Database traag

Status
Niet open voor verdere reacties.

woltersgert

Gebruiker
Lid geworden
15 mei 2001
Berichten
47
Hallo Helpmij,

Access database van 120 Mb is traag in het uitvoeren van de queries.

Enkele tabellen hebben 50 velden, enkele queries hebben ook zo'n 50 velden. Er zijn geen relaties tussen de tabellen. In de queries zijn wel relaties.

De oplossing lijkt mij dat er een nieuwe database ontworpen wordt met kleinere tabellen met relaties tussen de tabellen.

Of zijn er andere oplossingen?

Met vriendelijke groet,

Gert Wolters
 
Het aantal tabellen/velden lijkt mij niet het probleem. De grootte van de db zou ook niet zo'n probleem hoeven zijn. Je kunt hem eens comprimeren/herstellen, dat wil nog wel eens schelen. En kijk ook eens naar de koppelingen tussen de tabellen; als je ze wel gebruikt in queries, waarom dan niet gelijk goed vastleggen?
Laatste tip: kijk ook eens naar de index velden in de tabellen; daar kun je ook nog een behoorlijke snelheidswinst boeken.
 
Hallo helpmij,

Na alle voorgestelde wijzigingen is er geen verbetering in de snelheid van de queries.

Database is door een oud collega gemaakt. In de belangrijke queries maakt de database gebruik van hulp queries.

Situatieschets:

qry Facturen bevat: tabel + query1 (in deze query is een relatie gelegd tussen tabel en query1)
query1 bevat: 2 tabellen (tabel x en tabel y) + query2 + query3 + query4 (in deze query is een relatie tussen de 2 tabellen x en y, elke query heeft een relatie met de tabel x)

Voor het uitvoeren van de query Facturen, heeft Access 75 seconden nodig.

Is dit te verbeteren of te veranderen zodat het sneller werkt?

Groetjes,

Gert
 
Daar is zo weinig van te zeggen; we hebben op zijn minst de SQL nodig die je gebruikt. Dus als je die kunt posten, kunnen we wat meer zeggen. De SQL graag wel opmaken met de SQL knop, of de CODE knop (knp met #)
Je mag ook vóór de sql dit typen: Rechte haak ([) SQLRechte haak (]) en er achter: Rechte haak ([) /SQLRechte haak (]) . Dan wordt de code ook netjes opgemaakt.
 
Laatst bewerkt:
Hallo Helpmij,

dit is de SQL code, veldnamen zijn verandert in de naam veldnaam vanwege de privacy.

PARAMETERS [Voer jaartal in] Value, [Voer maand nummer in:] Text ( 255 );
SELECT DISTINCT [cursisten Query].[Veldnaam], [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam , [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, lokatie. Veldnaam, lokatie. Veldnaam, lokatie. Veldnaam, lokatie.[Veldnaam], lokatie.[Veldnaam], lokatie.[Veldnaam], lokatie.[ Veldnaam], [cursisten Query].Veldnaam, [cursisten Query].Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query].[Veldnaam], [cursisten Query].Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query].[Veldnaam], [cursisten Query]. Veldnaam, [cursisten Query].Veldnaam, [cursisten Query].Veldnaam, [cursisten Query]. Veldnaam, [cursisten Query].Veldnaam, [cursisten Query].Veldnaam, *
FROM lokatie INNER JOIN [cursisten Query] ON lokatie.Id = [cursisten Query].Lokatie
WHERE ((([cursisten Query].MaandCursus)=[Voer maand nummer in:]) AND (([cursisten Query].Jaar)=[Voer jaartal in]));
 
Hoi Gert,

Je bent verkeerd bezig als je vanwege privacy redenen de veldnamen anders moet noemen. De privacy gevoelige data zit meestal in de data en niet in je database ontwerp.

Het lijkt mij daarom dat je je database moet normaliseren. In heel bijzondere gevallen krijg je dan een tabel met 50 velden. Meestal zijn dat er niet meer dan 20.

HTH:D
 
Om het een beetje te versimpelen:

[SQL]PARAMETERS [Voer jaartal in] Value, [Voer maand nummer in:] Text ( 255 );
SELECT DISTINCT Veldnaam1, Veldnaam2, Veldnaam3, Veldnaam4, Veldnaam5, Veldnaam6, Veldnaam7, ... , Veldnaam40, *
FROM lokatie INNER JOIN [cursisten Query] ON lokatie.Id = [cursisten Query].Lokatie
WHERE ([cursisten Query].MaandCursus=[Voer maand nummer in:] AND [cursisten Query].Jaar=[Voer jaartal in]);[/SQL]

Je hebt dus een query gemaakt ([cursisten Query]) en die koppel je aan je lokaties. De snelheid van deze query zou prima moeten zijn. Het probleem zou dus kunnen liggen in je onderliggende query. Overigens zou ik de WHERE onderbrengen in je eerste query; uiteindelijk filter je daar namelijk op. De tweede query maakt eerst een volledige recordset aan waar dan een filtering op los wordt gelaten. Als er minder records te koppelen zijn in de tweede query, is die van zichzelf al een stuk sneller.

En zo ziet een query er uit als je hem de juiste opmaak geeft ;)
 
... en ik zou ", *" uit je selectie halen. Je hebt al veel velden geselecteerd, het heeft geen zin om dat nog eens te doen.

Share & Enjoy!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan