Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Leute,

wie ich gestern schon geschrieben hatte, hab ich leichte probleme mit einem query:


SELECT mp.id, mp.machine, mp.logtimestamp, mp.dyelotrefno, mp.alarmno, mp.alarmstate, mp.alarmaddstate, m.machinename, m.mgroupno, m.minvolume, m.maxvolume, m.minweight, m.maxweight, m.machinetype, m.importstate, m.importerror, mga.machgrp_mgroupno, mga.name, mga.shortname, mga.reaction, sm.Deutsch, sm.Englisch, sm.Französich, sm.Italienisch, sm.Spanisch, sm.Portugisisch, sm.Türkisch, sm.chinesisch, sm.Griechisch

FROM machineprotocol mp

JOIN machines m ON mp.machine = m.machineno

JOIN machgrpalarm mga ON m.mgroupno = mga.machgrp_mgroupno

JOIN MON1_stoermeldungen sm ON mga.TypeConfId = sm.TypeConfId

WHERE mp.Machine = 'MON1'

AND mp.DataType =1

AND mp.logtimestamp BETWEEN '2005-05-01' AND '2005-05-28'

und zwar gibt das query mir 2,8Mio Einträge zurück; ist nicht sinnvoll.

ich brauche prinzipiell für jeden der einträge in der tabelle machineprotocol die entsprechenden zugehörigen daten der tabellen machines, machgrpalarm und MON1_stoermeldungen; und NUR die Daten. Den Effekt hat mein Join allerdings leider nicht. Geht das überhaupt und ja wie?

Irgendwie bin ich was joins angeht doch nicht so weit wie ich immer dachte.

bin für jede hilfe dankbar

mfg

Eth

EDIT: mir fällt grad auf dass ich das vielleicht ins DB Forum hätte posten sollen ... @mod: verschieben :P

Geschrieben

Also ich baue die "Joins" immer selbst in die WHERE Bedingung ein. Ob das allerding eines Optimierung ist weiß ich nicht. Das würde dann so aussehen


SELECT mp.id, mp.machine, mp.logtimestamp, mp.dyelotrefno, mp.alarmno, mp.alarmstate, mp.alarmaddstate, m.machinename, m.mgroupno, m.minvolume, m.maxvolume, m.minweight, m.maxweight, m.machinetype, m.importstate, m.importerror, mga.machgrp_mgroupno, mga.name, mga.shortname, mga.reaction, sm.Deutsch, sm.Englisch, sm.Französich, sm.Italienisch, sm.Spanisch, sm.Portugisisch, sm.Türkisch, sm.chinesisch, sm.Griechisch

FROM machineprotocol mp, machines m, machgrpalarm mga, MON1_stoermeldungen sm

WHERE m.machineno = mp.machine  

AND  m.mgroupno = mga.machgrp_mgroupno

AND mga.TypeConfId = sm.TypeConfId

AND mp.Machine = 'MON1'

AND mp.DataType =1

AND mp.logtimestamp BETWEEN '2005-05-01' AND '2005-05-28'

Geschrieben

Versuche mal:


SELECT mp.id, mp.machine, mp.logtimestamp, mp.dyelotrefno, mp.alarmno, mp.alarmstate, mp.alarmaddstate, m.machinename, m.mgroupno, m.minvolume, m.maxvolume, m.minweight, m.maxweight, m.machinetype, m.importstate, m.importerror, mga.machgrp_mgroupno, mga.name, mga.shortname, mga.reaction, sm.Deutsch, sm.Englisch, sm.Französich, sm.Italienisch, sm.Spanisch, sm.Portugisisch, sm.Türkisch, sm.chinesisch, sm.Griechisch

FROM machineprotocol mp

JOIN machines m ON mp.machine = m.machineno

JOIN machgrpalarm mga ON m.mgroupno = mga.machgrp_mgroupno

JOIN MON1_stoermeldungen sm ON mga.TypeConfId = sm.TypeConfId

WHERE mp.Machine = 'MON1'

AND mp.DataType =1

AND mp.logtimestamp BETWEEN '2005-05-01' AND '2005-05-28'

GROUP BY m.machineno, mga.machgrp_mgroupno, sm.TypeConfId

Gruß Jaraz

Geschrieben

Bei den Datenmengen in den Tabellen schießt mir das regelmäßig den DB Server ab.

Funktioniert an sich ganz gut ... hat allerdings ne ausführungszeit von 67 sekunden ... ist für uns leider nicht akzeptabel ... also sollten wir vielleicht doch die daten separat auslesen und innerhalb unserer anwendung zusammenpacken ...

Geschrieben

wir reden von standard-sql; das query soll in der fertigen anwendung über ne odbc schnittstelle mit einer beliebigen datenbank funktionieren. Momentan teste ich allerdings auf mysql 4.1

Geschrieben

Funktioniert an sich ganz gut ... hat allerdings ne ausführungszeit von 67 sekunden ... ...

Soll die Anwendung später auf einem Application Server laufen ? Dann würde ich die Verwendung einer DataSource empfehlen, die beschleunigt das ganze ungemein

Geschrieben
Momentan teste ich allerdings auf mysql 4.1

wenn Du mit einer Datenbank arbeiten wuerdest, dann wuerde sich ein ausfuehrungsplan mal lohnen. kann das eine mysql?

Geschrieben

mysql kennt wie andere relationale datenbanken die EXPLAIN-syntax. eine ausgabe des optimiereres sowie allenfalls eine ausgabe der slow queries mit mysqldumpslow kann ganz hilfreich sein.

zusätzlich kann die von Jaraz erwähnte tabellenindizierung (wenn das tabellenmodell adaptiert werden kann/darf), tabellencaching (je nach art der DB, das können nicht alle), sowie ein generelles ausloten der möglichkeiten des servertunings schon mal einiges bringen.

s'Amstel

Geschrieben
@pinhead: was meinst du mit einer DataSource? Das ganze läuft doch schon über eine ODBC DataSource...

Man kann auf einem Application Server eine DataSource eintragen. Und der stellt dann Connection Pool zur Verfügung. Ich habe festgestellt das diese Vorgehensweise sehr viel schneller ist als das Laden eines JDBC Treibers und dann das erzeugen einer Connection über den DriverManager

Geschrieben

Das ganze wird in unsere Anwendung symmedia SP/1 integriert.

Die Tabellen/Datenbankstruktur sowie die Serverkonfiguration wird vom Kunden festgelegt und ich habe keine Möglichkeit da irgendwas dran zu ändern.

Sieht wohl doch danach aus als ob ich die Daten manuell auslesen müsste ... und selbst zusammenbauen ... nur ob das schneller ist weiß ich auch nicht ...

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...