Code:
FROM Summarydata,instname,parametername,patrolagent, appclassname
Hab's heute gelernt, also wollen wir dem mal Glauben schenken. Das ist ein Kartesischer Join! Hier werden ersteinmal alle möglichen Kombinationen der Datensätze untereinander gebildet. Aus diesem Zwischenergebnis heraus engst du dann mit deiner WHERE Klausel das Ergebnis ein. Bei der Anzahl der Tabellen wundert mich das also garnicht. Angenommen jede Datei hat nur 10 Datensätze, dann hast du 10^^5 (=100 000) Datensätze die ersteinmal temporär erzeugt werden.
Besser du gehst gleich auf einen INNER JOIN, alternativ LEFT OUTER JOIN. Kommt auf die Aufgabenstellung an.
Code:
SELECT
gmttimestamp,
valuecount,
valuemin,
valuemax,
valuesum
FROM Summarydata INNER JOIN instname ON (
summarydata.instid=instname.instid
AND instname.name='lo0'
)
INNER JOIN parametername ON (
summarydata.parameterid=parametername.parameterid
AND parametername.name='NETPacketsIn'
)
INNER JOIN patrolagent ON (
summarydata.agentid=patrolagent.agentid
AND patrolagent.patrolagentname='alex'
)
INNER JOIN appclassname ON (
summarydata.appclassid =appclassname.appclassid
AND appclassname.name='NETWORK'
)
/* Musst du unbedingt minutengenau abrechnen?
* Meine Erfahrung hat gezeigt, dass meistens tage genaues
* abrechnen ausreichend ist.
AND gmttimestamp>= to_date('19.02.2005 15:00:00','dd.mm.yyyy hh24:mi:ss')
AND gmttimestamp<= to_date('19.04.2005 15:00:00','dd.mm.yyyy hh24:mi:ss')
*/
Versuch mal, was dabei heraus kommt.
/*EDIT: Das mit den Indexen stommt natürlich auch. Die Joins sollten dir zeigen wo die sitzen müssen. EDIT */
Hans
Lesezeichen