Select mit Unterabfrage Performanceproblem

30/08/2007 - 22:14 von Ronald Siegel | Report spam
Hallo zusammen,

Folgende Abfrage funktioniert, dauert aber sehr lange bei gerade mal 84
Internetseiten und 116 Stichworten (ca. 1 Minute 30 Sekunden)

Auf jeder Internetseite sollen die "wichtigsten" Links zu àhnlich
gelagerten Beitràgen eingefügt werden, es sollen diejenigen Beitràge
angezeigt werden, die die höchste Stichwortübereinstimmung haben.

D. h. ich lese zuerst die Stichworte aus, die auf einer Seite enthalten
sind und überprüfe, in welchen Seiten sie noch enthalten sind.
Die jeweiligen Stichworte sind in verschiedenen Kategorien unterteilt (1 -
höchste Prioritàt bis 3 niedrigste).

Für Tipps, wie ich diese Abfrage beschleunigen kann, danke ich bereits im
Voraus.

SELECT Links.ID, HTMLInhalt.Links_ID, Sum(100/Stichworte.Prioritaet_ID) as
Prio
INTO weitereBeitraege
FROM HTMLInhalt, Stichworte, Links
WHERE
NOT HTMLInhalt.Links_ID=Links.ID AND
HTMLInhalt.Inhalt LIKE '%[>,.(¥"; ]'+Stichworte.Begriff+'%'
AND Stichworte.Prioritaet_ID < 3
AND Stichworte.Begriff in
(SELECT Stichworte1.Begriff
FROM Stichworte as Stichworte1, HTMLInhalt as HTMLInhalt1
WHERE HTMLInhalt1.Links_ID=Links.ID AND HTMLInhalt1.Inhalt LIKE
'%[>,.(¥"; ]'+Stichworte1.Begriff+'%')
GROUP BY HTMLInhalt.Links_ID, Links.ID
ORDER BY Links.ID ASC, Prio DESC, HTMLInhalt.Links_ID DESC;

Grüße
Ron
 

Lesen sie die antworten

#1 Christa Kurschat
31/08/2007 - 08:13 | Warnen spam
Hallo Ronald,

Ronald Siegel schrieb:

Hallo zusammen,

Folgende Abfrage funktioniert, dauert aber sehr lange bei
gerade mal 84 Internetseiten und 116 Stichworten (ca. 1 Minute
30 Sekunden)

Auf jeder Internetseite sollen die "wichtigsten" Links zu
àhnlich gelagerten Beitràgen eingefügt werden, es sollen
diejenigen Beitràge angezeigt werden, die die höchste
Stichwortübereinstimmung haben.

D. h. ich lese zuerst die Stichworte aus, die auf einer Seite
enthalten sind und überprüfe, in welchen Seiten sie noch
enthalten sind. Die jeweiligen Stichworte sind in
verschiedenen Kategorien unterteilt (1 - höchste Prioritàt bis
3 niedrigste).

Für Tipps, wie ich diese Abfrage beschleunigen kann, danke ich
bereits im Voraus.

SELECT Links.ID, HTMLInhalt.Links_ID,
Sum(100/Stichworte.Prioritaet_ID) as Prio
INTO weitereBeitraege
FROM HTMLInhalt, Stichworte, Links
WHERE
NOT HTMLInhalt.Links_ID=Links.ID AND
HTMLInhalt.Inhalt LIKE '%[>,.(¥"; ]'+Stichworte.Begriff+'%'
AND Stichworte.Prioritaet_ID < 3
AND Stichworte.Begriff in
(SELECT Stichworte1.Begriff
FROM Stichworte as Stichworte1, HTMLInhalt as HTMLInhalt1
WHERE HTMLInhalt1.Links_ID=Links.ID AND HTMLInhalt1.Inhalt LIKE
'%[>,.(¥"; ]'+Stichworte1.Begriff+'%')
GROUP BY HTMLInhalt.Links_ID, Links.ID
ORDER BY Links.ID ASC, Prio DESC, HTMLInhalt.Links_ID DESC;




Ich habe die Erfahrung gemacht, daß es schneller ist, wenn man statt der
Unterabfragen einen view verwendet. Anscheinend wird das besser optimiert.
Ich würde folgendes versuchen:
Mach auch der Unterabfrage einen view und joine den über den Begriff an
Deine Hauptabfrage.

Gruß
Christa
Access-FAQ: http://www.donkarl.com
SQL-Server-FAQ: www.sqlfaq.de
InsideSql: www.insidesql.de
Suchen in den Newsgroups:
http://groups.google.de/advanced_gr...p;ie=UTF-8

Ähnliche fragen