Office: (Office 2013) Abfrage 2 Tabellen aus 2 SQL Datenbanken sehr langsam

Helfe beim Thema Abfrage 2 Tabellen aus 2 SQL Datenbanken sehr langsam in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo Josef, vielen Dank! Ich verstehe, aber die müssten ja in jedem Fall kürzer als die Zeit für den Abruf der Join Abfrage sein oder? Wie auch... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von PNG75, 14. März 2018.

  1. Abfrage 2 Tabellen aus 2 SQL Datenbanken sehr langsam


    Hallo Josef,

    vielen Dank! Ich verstehe, aber die müssten ja in jedem Fall kürzer als die Zeit für den Abruf der Join Abfrage sein oder? Wie auch immer, hier die Werte:

    SELECT * FROM TABELLE1

    473; 0,13 Sek

    SELECT Top 1 * FROM TABELLE1

    1; 0,12 Sek

    SELECT Top 1 IndiziertesDatenfeld FROM TABELLE1 Order by IndiziertesDatenfeld

    1;0,12 Sek






    SELECT * FROM TABELLE2

    477; 0,11 Sek

    SELECT Top 1 * FROM TABELLE2

    1; 0,13 Sek

    SELECT Top 1 IndiziertesDatenfeld FROM TABELLE2 Order by IndiziertesDatenfeld

    1; 0,13 Sek





    SELECT * FROM TABELLE1 WHERE ReNr LIKE '1*'

    335; 0,12 Sek





    Als Indizes sind nur die PrimaryKeys sichtbar, alle anderen Indizes sind in Access als "nein" gekennzeichnet. hm... Aber das scheint in allen Tabellen so zu sein, ist das speziell hier wegen der 2 verschiedenen DBs bei WHERE Abfragen ein besonderes Problem?

    Ansonsten gehen ja alle Tabellen und auch Abfragen super schnell abzurufen. Es tritt nur bei diesem Mix aus Tabellen der 2 DBs auf, was du da mit dem Kreuzprodukt beschreibst könnte ich mir hier gut vorstellen.

    Wie kann ich den Ablaufplan in diesem Sinne richtig stellen?
     
  2. Wie schnell läuft die SQL-Anweisung
    Code:
    /edit: gerade sehen ... das läuft schnell genug. *wink.gif*

    Wenn das schnell läuft, testest du als nächstes die Auswertung der anderern Tabelle über das Feld, das im Join-Ausdruck verwendet wird.


    Ist die von dir verwendete SQL-Anweisung mit join schon irgendwo in diesem Thread zu sehen?


    Die Indizes (es könnten auch Mehrfelderindizes sinnvoll sein) siehst du, wenn du im Tabellenentwurf das Index-Fenster über das Menüband öffnest.

    mfg
    Josef
     
    Josef P., 19. März 2018
    #32
  3. Josef, ich glaube du hast es wirklich erraten! Die beiden Tabellen haben zwar beide einen Primary Key aber weder Frontend noch Backend (da separiert) kennen den Zusammenhang (F-Key), daher erstellt er bestimmt so ein Kreuzprodukt.

    Wie kann ich das verhindern?

    ich habe bereits in Access eine "Beziehung" der beiden Tabellen angelegt, hilft leider nix...
     
  4. Abfrage 2 Tabellen aus 2 SQL Datenbanken sehr langsam

    Fremdschlüssel sind für Join-Ausdrucke nicht geschwindigkeitsrelevant. Dafür zählt nur der Index.
    Zum Testen: vielleicht hilft es, wenn du die Tabellen neu verknüpfst, um die aktuell einstellten Indizes im Access-Frontend zu sehen.

    Ich kenne deine SQL-Anweisung nicht.
     
    Josef P., 19. März 2018
    #34
  5. Ja, unsere Antworten haben sich grad überschnitten, hier die SQL Anweisung, aber die ist halt unspektakulär *biggrin.gif*

    ungefähr so sieht sie aus

    SELECT X.fIDkunde, X.IDrechnung, X.ReNr, X.ReDatum, X.ReStornoDatum, X.LeistungVon, X.LeistungBis, X.Vorname, X.Nachname, X.ReSumme, X.ReNotes, Y.IDkunde, Y.NachnameRE
    FROM VIEWDB1 AS X LEFT JOIN VIEWDB2 AS Y ON X.fIDkunde=Y.IDkunde;


    neu verknüpfen bringt nichts, Indizes werden in der Access Entwurf Ansicht alle auf nein gestellt außer der PrimaryKey und ich kann das auch nicht umstellen, da Änderungen der verknüpften Tabellen nicht gespeichert werden können.



    Falls relevant und falls ich es noch nicht erwähnt habe (argh! denke aber habs am Anfang erwähnt) die verknüpften Tabellen sind wiederum VIEWS im Backend, aber die werden von Access ja wie Tabellen behandelt. Kann aber natürlich erklären warum z.B. Indizes nicht übernommen werden. Aber wie du auch schon sagst, sollten die Indizes nicht so entscheidend sein bei den paar Datensätzen oder? Oder hängt daran dass er ein Kreuzprodukt erstellt?
     
  6. tatsächlich: die indizes von direkten Tabellen werden übernommen, aber von einer VIEW nicht, das ist aber wohl nur in dieser Konstellation ein echtes Problem wobei ich vermute dass es auch sonst Performanceprobleme bringt. Aber mir wurde immer empfohlen mit VIEWs zu arbeiten, da sie viel schneller sind als Access Abfragen, das ist prinzipiell richtig oder?
     
  7. Jetzt können wir die von ebs vorgeschlagene Variante mit dem "vorher filtern" ausprobieren.

    1. Deine Anweisung mir nur wenigen Ausgabefeldern
    Code:
    etwas umgebaut:
    Code:
    Bei beiden Varianten würde ich den gleichen Ablaufplan erwarten, bei Access weiß man das allerdings nie so genau. *wink.gif*

    Und jetzt noch ein etwas "anderer" Test:
    Speicher bitte den SQL-Ausdruck
    Code:
    In einer Pass-Through-Abfrage und teste damit diesen SQL-Ausdruck:
    Code:
    Anm.: hilfreich kann auch sein, wenn man sich die SQL-Anweisungen ansieht, die an den Server gehen.
    Das ist mir an dieser Stelle allerdings zu viel zum Erklären - da müsstest du dich zuerst selbst schlau machen. *wink.gif*


    Grundsätzlich schon - aber eher nur dann, wenn nur eine View verwendet wird und der Jet-Abfrage-"Optimierer" nicht überlegen muss, wie er die Abfrage ausführt, sondern alles an den Server weiterreicht.
     
    Josef P., 19. März 2018
    #37
  8. Abfrage 2 Tabellen aus 2 SQL Datenbanken sehr langsam

    Hi Josef,

    ich habe den WHERE Filter nun nur auf die VIEW1 angewendet, das ganze eingeklammert und erst danach gejoined. Das Ergebnis ist immernoch 14-15 Sek.

    Es ist ja sehr auffällig, dass er bei VIEWs die Indizes nicht übernimmt, daher habe ich nun einmal probiert, keine VIEWs zu verwenden sondern direkt alles in der Access-Abfrage zusammenzubauen. Siehe da, die WHERE LIKE Bedingung läuft unter 1 Sek! Zwar nicht super schnell aber immerhin 0,5 Sek. Access Abfragen sind ja immer erheblich langsamer als serverseitige VIEWs.

    Access hat also wohl enorme Probleme damit, dass hier VIEWs und nicht Tabellen von verschiedenen Servern verarbeiten werden müssen, bei denen man die Indizes abgesehen vom Primärschlüssel nicht nutzbar machen kann. Soweit ich das einschätze gibt es auch keinen Weg das zu umgehen, außer mit federated tables, die laut all inkl Support hier nicht möglich sind, oder einer Fusion der DBs.

    Ich könnte aber für diese Endlosformulare nun im Frontend die Tabellen zusammenbauen und so erstmal arbeiten. Anscheinend sollte man serverseitige VIEWs nicht mit Access Abfragen mixen, zumindest nicht wenn man sie filtern will.

    Vielen Dank, ohne euch wäre ich nie darauf gekommen. :-)))

    Interesseant ist noch, dass ich bei diesem Test nur die eine VIEW aufgelöst habe, die andere nicht. D.h. er hat nur dann so enorme Probleme, wenn die VIEWs ohne Indizes auf beiden Seiten bestehen. Macht das Sinn!?

    Noch weitere Ideen? Ansonsten ist mein Problem erstmal gelöst, damit kann ich arbeiten. Tausend Dank *Smilie
     
  9. Eine Sicht im DMBS ist meiner Meinung nach nur dann schneller als der Tabellenzugriff über ODBC, wenn in der Sicht mehrere Tabellen miteinander verbunden sind. Ansonsten kann Jet/ACE ganz gut mit ODBC-verknüpften Tabellen umgehen.
    Der Vorteil der Sicht ist, dass das DBMS den Ausführungsplan gestaltet und der ist meist besser als der von Access bei Access-Abfragen mit mehreren per join verbundenen ODBC-Tabellen.



    Einen Test hätte ich noch:
    Kannst du der verknüpften Sicht einen Primärschlüssel geben?
    Code:
    Grund:
    Wenn Access/ACE/Jet über ODBC dem Server SQL-Anweisungen weitergibt, werden üblicherweise die Primärschlüsselwerte zurückgegeben und dann erst die restlichen Daten abgeholt. Ob das hilft, weiß ich nicht, aber ausprobieren kannst du es trotzdem. *wink.gif*

    Ansonsten: Gibt es bei MySQL indizierte Sichten?

    mfg
    Josef
     
    Josef P., 19. März 2018
    #39
  10. Ich vermute dass die Sicht in MySQL mit den Indizes arbeiten kann, aber Access bekommt sie nicht übergeben. In meinen Sichten sind immer mehrere Tabellen verbunden, die berechnet MySQL dermaßen schnell, dass sich das auf jeden Fall lohnt, bis auf diese tödliche Kombination hier.


    in PHPmyadmin kann ich einer Sicht keinen separaten P-Key zuordnen, die VIEW erkennt diese automatisch.


    Die verknüpfte Sicht wird immer beim Verknüpfen mit einem Primärschlüssel versehen, also Access kennt den Primärschlüssel der VIEW. Aber für alle anderen Felder kennt Access dann nicht die Indizes. Womöglich nicht mal die Relationen :S


    Ich habe auch die Erfahrung dass der Zugriff auf Tabellen insgesamt gut funktioniert.


    Danke!
     
  11. Access braucht die Indizes nicht - außer eventuell die Information über deren Existenz für die Erstellung das Ausführungsplans. Das Problem wird sein, dass Access/Jet/ACE beim Join mit den 2 Sichten einen schlechten Ausführungsplan erstellt.
    Falls du dir das einmal selbst ansehen willst: ShowplanCapturer .. damit könntest du die 2 Varianten - Abfrage mit den die Sichten und die Abfrage mit den Tabellen - vergleichen.
    Über ODBC-Tracing kannst du sehen, wie mit dem DBMS kommuniziert wird.

    Hast du die Variante mit der PassThrough-Abfrage ausprobiert?

    Bei so wenig Datensätzen könntest du auch überlegen, die Daten der ersten Sicht in einer temporären Access-Tabelle zwischenzuspeichern.

    mfg
    Josef
     
    Josef P., 19. März 2018
    #41
  12. Danke Josef,

    ich denke du hast völlig recht, der Ablaufplan wird in dieser Konstellation irgendwie enorm ungünstig sein.

    Ich greife das wieder auf sobald die Performance nicht mehr ausreichend ist. Ich habe zunächst mit dem hier gelernten eine gute vorläufige Lösung hinbekommen, insb. dadurch dass ich die Filter mit Kombinationsfeldern gebaut habe. Da ich jetzt auch in den Urlaub gehe markiere ich das erstmal als gelöst, danke euch allen und v.a. dir Josef, für die intensive Hilfestellung. :-) LG!
     
Thema:

Abfrage 2 Tabellen aus 2 SQL Datenbanken sehr langsam

Die Seite wird geladen...
  1. Abfrage 2 Tabellen aus 2 SQL Datenbanken sehr langsam - Similar Threads - Abfrage Tabellen SQL

  2. Vorkommen von Kunden in mehreren Tabellen per Abfrage filtern

    in Microsoft Access Hilfe
    Vorkommen von Kunden in mehreren Tabellen per Abfrage filtern: Hallo Community, ich habe folgendes Problem beim Nutzen einer Access-Datenbank. Zunächst die Datenstruktur: [ATTACH] Dies sind die Tabellen meiner Datenbank. In der Tabelle "Adressliste"...
  3. 3 Accesstabellen in eine neue Access Tabelle (nicht Abfrage) zusammenfügen

    in Microsoft Access Hilfe
    3 Accesstabellen in eine neue Access Tabelle (nicht Abfrage) zusammenfügen: Hallo, ich habe folgendes Problem: Ich habe 3 Tabellen in Access importiert und möchte diese ohne Abfrage in eine neue Accesstabelle zusammenfügen. Es müssen auch mehr Tabellen zusammengefügt...
  4. Automatisch aktualisierende Tabelle? Hilfe!! :-)

    in Microsoft Excel Hilfe
    Automatisch aktualisierende Tabelle? Hilfe!! :-): Hallo zusammen, ich habe da ein kleines Excel-Problem und komme einfach nicht auf die Lösung. Ich habe 25 riesige Tabellen und möchte diese in einer Tabelle zusammen, wenn eine bestimmte...
  5. Abfrage von Datensetzen unter Ausschluss von Datensätzen anhand anderer Tabelle

    in Microsoft Access Hilfe
    Abfrage von Datensetzen unter Ausschluss von Datensätzen anhand anderer Tabelle: Hallo liebe Forumsgemeinde, Nachdem ich mich in diverse Themen bezüglich Access eingearbeitet habe, habe ich erfolgreich schon einige Teilabschnitte meines aktuellen Projekts umgesetzt....
  6. Bestimmte Daten zwischen innerhalb eines Datumsbereichs einer Tabelle Anfügen

    in Microsoft Access Hilfe
    Bestimmte Daten zwischen innerhalb eines Datumsbereichs einer Tabelle Anfügen: Hallo, ich habe per Google und Foren SuFu leider nichts passendes finden können, wage aber zu bezweifeln, dass Access da an seine Grenzen kommt, da es eigentlich recht banal ist. Ich habe eine...
  7. Primärschlüssel/Fremdschlüssel aus 2.Tabelle automatisch einfügen

    in Microsoft Access Hilfe
    Primärschlüssel/Fremdschlüssel aus 2.Tabelle automatisch einfügen: Hallo zusammen, ich stehe gerade vor dem Problem, dass ich die Datensätze zwischen zwei Tabellen nicht verknüpfen kann. Konkret habe ich die beiden Tabellen tblEigenschaft und tblBasis. In der...
  8. VBA: SQL Abfrage ausführen und Resultat in eine Tabelle schreiben

    in Microsoft Access Hilfe
    VBA: SQL Abfrage ausführen und Resultat in eine Tabelle schreiben: Hallo Wie kann ich eine SQl Abfrage via VBA ausführen und danach den Wert in eine VBA Variable schreiben? Ich habe es so versucht: Code: Dim qdf As DAO.QueryDef Dim strSql As String Dim...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden