MariaDB mit MS Access: Langsam (Access)

Hage, Freitag, 05.01.2018, 16:28 (vor 286 Tagen)

Hallo,
ich versuche, eine ursprüngliche Foxpro-Datenbank (DBF-Dateien mit CDX-Indexdateien), auf die in MS-ACCESS zugegriffen wird, auf den kostenlosen MariaDB-Server umzusetzen. Über Xampp (als 32bit-Anwendung) stelle ich die MariaDB-Datenbank zur Verfügung; über ODBC (per localhost) greife ich in MS ACCESS darauf zu. So weit so gut.
Mein Problem: Beim Vergleich der Foxpro-Datenbank unter MS ACCESS mit der ODBC-Variante dauert das Suchen von Datensätzen elend lange.
Unter HeiseDB (Frontend für MariaDB) geht das Suchen wesentlich fixer.
Ich frage mich, ob Mikroschuft Steine in den Weg legt oder der Weg über ODBC einfach zu lang ist.
Weiß jemand einen besseren Weg? Wie kann ich sicherstellen, dass die in MariaDB angelegten Indizes beim Zugriff über VBA-SQL berücksichtigt werden?
So long
Hage

MariaDB mit MS Access: Langsam

PhilS ⌂, Freitag, 05.01.2018, 16:50 (vor 286 Tagen) @ Hage

Ich frage mich, ob Mikroschuft Steine in den Weg legt oder der Weg über ODBC einfach zu lang ist.
Weiß jemand einen besseren Weg? Wie kann ich sicherstellen, dass die in MariaDB angelegten Indizes beim Zugriff über VBA-SQL berücksichtigt werden?

Der Zugriff über ODBC auf verschiedenste DBMS, inkl. MySQL, ist generell performant möglich. - MariaDB habe ich dafür selbst noch nicht erprobt, dürfte sich aber in dieser Hinsicht nicht nennenswert von MySQL unterscheiden.

Die meisten Steine in den Weg legt i.d.R. der Entwickler der Access Anwendung, der sich nicht an empfohlene Praktiken bei der Datenbankentwicklung hält. - Access allein und vermutlich auch mit DBase/Foxpro-Dateien verzeiht/kompensiert dort vieles, was in einem echten Client-Server-Szenario unverzeihlich ist.

Indizes sollten üblicherweise automatisch verwendet werden.

MariaDB mit MS Access: Langsam

Martin Asal @, Sonntag, 07.01.2018, 11:34 (vor 284 Tagen) @ Hage

Ich frage mich, ob Mikroschuft Steine in den Weg legt oder der Weg über ODBC einfach zu lang ist.
Weiß jemand einen besseren Weg? Wie kann ich sicherstellen, dass die in MariaDB angelegten Indizes beim Zugriff über VBA-SQL berücksichtigt werden?

Möglicherweise legst du dir selbst Steine in den Weg? ;-)

Wenn ich "VBA-SQL" lese, klingt das, als wenn du in VBA einen SQL-String erzeugst und diesen dann ausführst? Das ist natürlich möglich, aber nie so performant wie eine als Abfrage gespeicherte Abfrage, weil Access intern seine Abfragen optimiert - was über den Umweg VBA nicht möglich ist. Innerhalb von Access merkt man den Unterschied manchmal nicht, aber bei Fremdformaten könnte ich mir da durchaus Probleme vorstellen.

Martin

MariaDB mit MS Access: Langsam

Hage, Sonntag, 07.01.2018, 18:15 (vor 284 Tagen) @ Martin Asal

Also, ich habe in MS ACCESS ein Formular "Titel-Suche" erzeugt, das eine Abfrage "Titel-Such
abfrage" ausführt. Dieser enthält für jedes in Frage kommende Such-Feld eine IIF-Klausel, sinngemäß wie folgt:
Select Felder... from Titel-DB
where ((IIF(Formular![Titel-Suche]!sAutor>"",(Titel.autor like Formular![Titel-Suche]!sAutor & "*"),"")) <> FALSE)) AND (IIF(Formular![Titel-Suche]!sTitel>"",(Titel like Formular[Titel-Suche]!stitel like Formular[Titel-Suche]!sTitel."*"),"")) AND..

Diese SQL-Abfrage hat also MS Access selbst erzeugt.
Die Datenbank enthält annähernd 30 000 Titel.
Die Suche dauert bei einer einfachen Abfrage auf Autor = "Maier" ohne andere Felder über eine Minute. Die Ergebnismenge scheint zwar richtig, aber hier bin ich mit den DBF-Dateien einfach viel schneller als über Apache, MySQL (aktiviert über Xampp). Daher mein Verdacht, dass er hier ohne Optimierung und ohne Zugriff auf die in MySQL alias MariaDB angelegten Indizes für Autor und Titel läuft.

Wenn ich ein SQL in HeidiSQL absetze, das auch über Apache und MySQL läuft, bin ich rasend schnell.
Daher mein Verdacht, dass MS den Access erschwert.

MariaDB mit MS Access: Langsam

PhilS ⌂, Montag, 08.01.2018, 14:51 (vor 283 Tagen) @ Hage

Diese SQL-Abfrage hat also MS Access selbst erzeugt.

Ich denke nicht.

Daher mein Verdacht, dass er hier ohne Optimierung und ohne Zugriff auf die in MySQL alias MariaDB angelegten Indizes für Autor und Titel läuft.

Das ist sicherlich korrekt. Wie soll in dem Ausdruck ein Index funktionieren, wenn du Datenbankinhalte an eine lokale (Access) Funktion zur Evaluierung übergibst?

Bau deine Where-Condition so auf, dass nur lokale Werte/Steuerelemente von der lokalen Funktion benötigt werden und deren Ergebnis dann als Kriterium an MySQL/MariaDB übergeben wird.

MariaDB mit MS Access: Langsam

Hage, Montag, 05.02.2018, 17:45 (vor 255 Tagen) @ PhilS

Die komplizierte Abfrage mit IIF-Funktionen abhängig von den eingegebenen Feldern hat tatsächlich der Abfrage-Generator erzeugt. Bei Reduktion auf ein Feld klappt alles ganz prima und schnell. Hat also was mit der eventuell für MySQL zu komplexen SQL-Anweisung zu tun?

MariaDB mit MS Access: Langsam

PhilS ⌂, Montag, 05.02.2018, 18:03 (vor 255 Tagen) @ Hage

Hat also was mit der eventuell für MySQL zu komplexen SQL-Anweisung zu tun?

IIF ist eine Access/VBA-Funktion. MySQL/MariaDB könnte mit dieser Funktion nichts anfangen. Das weiß die JET-/ACE-Datenbankengine von Access und gibt deshalb den Ausdruck nicht an MySQL weiter. In der Konsequenz bedeutet das, dass Access selbst alle Daten braucht, um die Abfrage bearbeiten zu können. - Mit der Komplexität an sich hat das nichts zu tun.

RSS-Feed dieser Diskussion
powered by my little forum