Hallo,
ich habe zwei unkomplizierte Views, die ich per VBA-Access sehr oft Abfrage. Mein Problem bezieht sich hierbei eher auf MySQL und nicht VBA.
Leider dauert genannte Abfrage besonders bei einem View furchtbar lange. Tabellenformat: ISAM. Auch sonst normale Installation: Mysql 5.0.27, Linux, Pentium 2, 412 MHz, RAM 512 MB
### Tabelle 1:
Stammdatenblatt mit Bohrungen (Koordinaten, Tiefe, Projektangaben etc...). ~1000 Datensätze.
### Tabelle 2:
Verzeichnis der Schichten einer jeden Bohrung. ~14000 Datensätze.
### View 1: Join aus beiden Tabellen und Mapping der Angaben aus den Schichtenverzeichnissen nach bestimmten Regeln, z.B.:
<snip>
case
...
when ((schichtenverzeichnis.strat = 'qp'
and schichtenverzeichnis.genese = 'Ss')
or ((schichtenverzeichnis.strat = 'qp'
or schichtenverzeichnis.strat = 'qw'
or schichtenverzeichnis.strat = 'qwo'
or schichtenverzeichnis.strat = 'qwu'
or schichtenverzeichnis.strat = 'qs')
and (schichtenverzeichnis.genese = 'fb'
or schichtenverzeichnis.genese = 'f')))
then 'qp/fb'
...
else 'unbekannt'
end as modell_einheit
</snip>
### View 2: Liste der Bohrungen, die die Regeln aus View 1 erfüllen. D.h. View 2 fragt, welche Bohrungen sowohl im Stammdatenblatt als auch im View 1 stehen.
Problem:
-----------
Ein select ueber View 1 dauert ~14 s, ueber View 2 ~14+1 s. Die CPU ist da bei knappen 100%.
In einem VBA-Script erstelle ich nun unter anderem eine Tabelle als Textdatei mit allen wichtigen Stammdaten der Bohrungen, die auch im View 1 stehen, was ich durch View 2 kontrolliere. D.h. im schlimmsten Fall 1000 Bohrungen * 14 s.
Wie man sieht, bestaende die Moeglichkeit, den Inhalt des gesamten Views 2 in ein Array zu laden und in VBA die ganze Prüfung durchzufuehren. Hmm, so richtig kann ich mich damit aber auch nicht anfreunden und wer weiss, ob das schneller ist. Meine Loesung war jetzt einfach, die Views auch als Tabellen anzulegen, was die Performances erheblich gesteigert hat (ich glaube < 1s). Das Vorgehen garantiert aber nicht unbedingt Aktualitaet.
Wie gehen hier (My)SQL-Fachleute ran? Ich hab was ueber Materialized Views gelesen und auch, dass man dies in MySQL mittels Trigger simulieren kann (
http://www.shinguz.ch/MySQL/mysql_mv.xhtml). Auch "Events" hab ich er-googled. Die sollen aber bei der 5.0 noch nicht dabei sein.
Oder ist der Rechner einfach nur zu alt?
Danke fuer Anregungen und Tips,
Torsten