Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Abfragezeit unverhältnismäßig groß beim anfügen einer neuen Tabelle

Frage Microsoft Microsoft Office

Mitglied: starter

starter (Level 1) - Jetzt verbinden

08.02.2008, aktualisiert 09.02.2008, 5726 Aufrufe, 9 Kommentare

Hallo, ich nochmal,

hab ein kleines Verständnisproblem in Access....

Also habe eine Abfrage mit Verknüpfungen zu mehreren Tabellen. Diese Abfrage dauert ca. 4 sek. Füge ich eine weitere relativ große Tabelle an, von der ich nur eine Spalte benötige, dauert die Abfrage 5 Stunden.

Kleines Beispiel:

Tabelle A mit ca 10000 Sätzen
Tabelle B mit ca 5000 Sätzen
Tabelle C mit ca 20000 Sätzen

Bisherige Abfrage:
Finde in Tabelle A die Sätze die in einem Zeitraum zwischen gestern und heute liegen. --> Bleiben ca. 30 Sätze übrig ...... und füge aus Tabelle B das Feld xy zu. .... soweit so gut (Abfrage ca. 4 sek.)

Neue Abfrage:
gleich wie Bisherige Abfrage, aber nun füge aus Tabelle C noch das Feld zz dazu. --> Abfragezeit auf einmal ca. 5 Stunden



Ich glaube dass Access dann hin geht und nicht das Ergebnis aus der bisherigen Abfrage nimmt und sich die Felder in Tabelle C sucht, also mit den gefundenen 30 Sätzen, sondern jeden einzelnen Satz aus Tabelle A (also die 10000) nimmt und die 20000 Sätze aus Tabelle C durch geht.


Nun meine Frage: Wie schaffe ich es, dass Access dann nur die 30 Sätze nimmt um die Tabelle C zu durchsuchen. Gibt es da einen Trick bezüglich der reihenfolge der Verknüpfungen?

Danke schon mal
Mitglied: AndreasHoster
08.02.2008 um 12:12 Uhr
Der SQL Code der Abfrage und die Angabe der Tabellendefinitionen, insbesondere Primarschlüssel und Indexfelder würden bei der Analyse helfen.

Ansonsten zur direkten Beantwortung Deiner Frage:
Einfache und übersichtlichere Variante:
Die jetzige Abfrage stehen lassen und auf diese aufbauend eine weitere Abfrage die die Tabelle 3 hinzufügt. Damit gibt die erste Abfrage erstmal 30 Datensätze zurück und dann kommt erst Tabelle 3.
Kompliziertere Variante:
SQL erlaubt die Definition von Select Statements als virtuelle Tabellen.
ALso sowas:
Select T1.a, VirtuelleTabelle1.b ... from (select ... from T2, T3) as VirtuelleTabelle1, T1

Ich denke aber nicht, daß das Dein Problem ist, sondern das die Verknüpfung zu Tabelle C auf ein nicht indiziertes Feld geht und daher Full Table Scans nötig sind, um die entsprechenden Zeilen zu finden.
Bitte warten ..
Mitglied: starter
08.02.2008 um 14:45 Uhr
super, vielen Dank für die schnelle Antwort.
Ich habe soeben Variante 1 Probiert und quasi die erste Abfrage als solches in die zweite integriert. Durch die erste Abfrage erhalte ich ja meine 30 Sätze (=4 sek). Verknüpft mit der zweiten Abfrage rödelt er wieder eine ewigkeit herrum. Ich habe nun nach einer Stunde abgebrochen.

Zu den Randinformationen:
1. ODBC auf 5 Tabellen mit Access 2000
2. Jede Tabelle hat zwischen 26.000 und 250.000 zeilen und zwischen 10 und 40 Spalten

Hier mal die SQL Anweisung. Für die erste Abfrage (4sek):

SELECT [Artikelnr zu Objekey].KD_VORGANGS_NR, [Artikelnr zu Objekey].POSITIONS_NR, [Artikelnr zu Objekey].ARTIKEL_NR, [Artikelnr zu Objekey].AUFTRAGSMENGE, PROD6_PFGJ.RM_GUT_MENGE, PROD6_PFGJ.BELEGUNGSEINHEIT_NR, PROD6_PFGJ.LETZTE_RUECKMELDUNG, [AC Modul].SACHMWERT, [AF Gangzahl].SACHMWERT, [AH Qualität].SACHMWERT, [BB Außendurchmesser].SACHMWERT, [BD Nutzlänge].SACHMWERT, [BC Gesamtlänge].SACHMWERT, [BE Bohrungsdurchmesser].SACHMWERT, [BG Anzahl Spannuten].SACHMWERT, [BH Spanwinkel].SACHMWERT, [BL Werkstoff].SACHMWERT
FROM [BL Werkstoff] INNER JOIN ([BH Spanwinkel] INNER JOIN ([BG Anzahl Spannuten] INNER JOIN ([BE Bohrungsdurchmesser] INNER JOIN ([BD Nutzlänge] INNER JOIN ([BC Gesamtlänge] INNER JOIN ([AC Modul] INNER JOIN ([AF Gangzahl] INNER JOIN ([AH Qualität] INNER JOIN ([BB Außendurchmesser] INNER JOIN (PROD6_PFGJ INNER JOIN [Artikelnr zu Objekey] ON PROD6_PFGJ.RUECKMELDE_NR = [Artikelnr zu Objekey].RUECKMELDE_NR) ON [BB Außendurchmesser].OBJKEY = [Artikelnr zu Objekey].Ausdr1) ON [AH Qualität].OBJKEY = [BB Außendurchmesser].OBJKEY) ON [AF Gangzahl].OBJKEY = [AH Qualität].OBJKEY) ON [AC Modul].OBJKEY = [AF Gangzahl].OBJKEY) ON [BC Gesamtlänge].OBJKEY = [AC Modul].OBJKEY) ON [BD Nutzlänge].OBJKEY = [BC Gesamtlänge].OBJKEY) ON [BE Bohrungsdurchmesser].OBJKEY = [BD Nutzlänge].OBJKEY) ON [BG Anzahl Spannuten].OBJKEY = [BE Bohrungsdurchmesser].OBJKEY) ON [BH Spanwinkel].OBJKEY = [BC Gesamtlänge].OBJKEY) ON [BL Werkstoff].OBJKEY = [BH Spanwinkel].OBJKEY
WHERE (((PROD6_PFGJ.BELEGUNGSEINHEIT_NR)=150002 Or (PROD6_PFGJ.BELEGUNGSEINHEIT_NR)=160002 Or (PROD6_PFGJ.BELEGUNGSEINHEIT_NR)=170002) AND ((PROD6_PFGJ.LETZTE_RUECKMELDUNG) Between "20080107" And "20080111"));



Ergeben also meine 30 Sätze.


und nun soll einfach nur noch der WERKSTOFF hinzu der in der Tabelle PART zu finden ist. Der Schlüssel ist die hier die Artikel_NR



OK ich gebe zu die erste Abfrage habe ich hier sark zusammengefasst beschrieben. Aber immerhin nur 4 Sek.

Grüße
Bitte warten ..
Mitglied: AndreasHoster
08.02.2008 um 15:06 Uhr
Das bedeutet, daß er zum Raussuchen der passenden Zeilen aus Tabelle Part so lange braucht.

Ist das Feld der Tabelle Part, welches für den Join verwendet wird, alleiniger Primärschlüssel, bzw. liegt ein alleiniger Index auf dem Feld?
Bitte warten ..
Mitglied: starter
08.02.2008 um 15:12 Uhr
Die Tabelle part ist der Artikelstamm und der Primärschlüsse ist die Artikel_Nr. Ich würde behaupten dass im ganzen System sich keine Tabelle besser für diesen Primärschlüssel eignen würde.

Ich habe das Gefühl, dass Access mit der Datenmenge schlicht und einfach überforder ist. Ich habe versucht die SQL Anweisung in Toad einzufügen. Aber meine Oracle-Datenbank kennt wohl kein INNER JOIN... Aber wie macht das dann Access??
Bitte warten ..
Mitglied: AndreasHoster
08.02.2008 um 16:03 Uhr
Möglich, wie groß ist die MDB denn insgesamt?
Wir haben hier 500 MB MDBs, die gehen gerade noch so.

Aber das Raussuchen von Zeilen per Primärschlüssel sollte deutlich schneller gehen.
Wie schnell geht den eine Abfrage vom Typ:
Select * from part where Artikel_NR='xxxxx' or Artikel_NR='yyyyy'

Zum Inner Join:
Select T1.a, T2.b from T1, T2 where T1.ID=T2.ID
wäre ein Inner Join ohne das Schlüsselwort Inner Join. Das sollte auch Oracle hinkriegen.
Bitte warten ..
Mitglied: starter
08.02.2008 um 16:14 Uhr
Hmm das sind ja nur ein paar Tabellen von der DB... aber was heißt eigentlich MDB? ?=Microsoft-DB?? Wir haben doch eine Oracle DB... und die ist so ca 6 GB groß...

Das Raussuchen via Access und ODBC in part ist in sekunden schnelle passiert ...

Wenn das Inner Join sonst nichts anderes macht bin ich beruhigt...

Wie schon geschrieben denke ich, dass da Access an die grenzen kommt, obwohl ich mir das nicht so richtig vorstellen kann .... (von übrgigebliebenen 30 Dateien aus einer anderern Tabelle einen Wert raussuchen) Villeicht liegt es doch an mir.....

Vielen Dank schon mal für die HIlfe
Bitte warten ..
Mitglied: AndreasHoster
08.02.2008 um 16:33 Uhr
Äh, sorry, das ist bei mir nicht angekommen daß Access nur als Frontend verwendet wird.

Und Ok, da gibts ein Problem, Abfragen in Access werden von Access berechnet, damit muß Access erstmal alle Tabellen laden und die Indizes der Oracle DB werden nicht benutzt.

Besser ist es, dies als View auf der Oracle anzulegen. Dann berechnet das die Oracle DB und nicht Access. Spart auch Bandbreite im Netzwerk.
Bitte warten ..
Mitglied: starter
09.02.2008 um 22:10 Uhr
Ah ok, und wie kann ich auf die Oracle-DB ein view ausführen? Kann ich das mit Access? Ich dachte dadurch dass ich die Tabellen per ODBC verknüpft habe lade ich so gut wie nichts rüber!? Sorry für die Frage aber ich kenne mich noch nicht so gut mit Access und DB's aus.
Bitte warten ..
Mitglied: AndreasHoster
09.02.2008 um 22:47 Uhr
Die Tabellen per ODBC verknüpfen bedeutet nur, daß die Daten der Tabellen nicht in der Access MDB Datei liegen, aber bei Abfragen, Suchen, Sortieren macht Access alles selber und muß dazu die ganzen Daten Lesen.

Die View/Sicht musst Du erst auf der Oracle DB anlegen. geht mit jedem Tool das SQL Befehle an die Oracle schicken kann, ich glaube das von Oracle heißt SQL PLUS. Toad sollte auch gehen. Oracle ist halt nicht meine DB.
View anlegen geht mit create view as Select ... und hier das passende Select-Statement.

Danach kannst Du die View wie eine Tabelle per ODBC verbinden. In Access wird das auch als Tabelle dargestellt. Und wenn Du dann Daten aus dieser Tabelle liest, wird auf der Oracle DB die View ausgeführt.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Netzwerk
Windows Server 2003 SBS Netzwerk durch neuen Server Ersetzen (9)

Frage von MultiStorm zum Thema Windows Netzwerk ...

Microsoft Office
Pivot Tabelle schützen ohne Datenabschnitt (1)

Frage von lupi1989 zum Thema Microsoft Office ...

Server
gelöst SQL-Tabelle portieren und dabei Daten konvertieren (1)

Frage von menace zum Thema Server ...

Windows Server
Zugriffsprobleme von neuen AD Benutzern auf Freigaben und Richtlinen (2)

Frage von Morilec469 zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...