nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Probleme mit Subselect -> extrem langsam

Von: Wolfgang Maier (mw@softconsult.at) [Profil]
Datum: 03.07.2008 16:07
Message-ID: <30d6c$486cdd37$d52f2b21$12585@news.chello.at>
Newsgroup: de.comp.datenbanken.mysql
Hi,

ich habe auf einem 4-Corer-Server eine MySQL 5.x Datebank laufen.
In der Tabelle sind gerade mal 5000 Datensätze.

Trotzdem dauern Subqueries extrem lange (beim ersten Aufruf, der 2 geht fix)
Allerdings wird der Query für jede Abfrage geändert!

Folgender Versuch:
Alle Parent-Datensätze finden, die selbst oder deren Clientdatensätze einem
Filter entsprechen.
ID der Datensätze ist Primary-Key
Ermittelt werden 4 Datensätze
Die innere Where-Klausel wird über User-Aktionen zusammengestellt, daher
wird bei jeder Abfrage eine andere Klausel sein.

Folgendes:
Innere Query:
15 msec
SELECT DISTINCT CASE WHEN x1.Parent_ID > 0 THEN x1.Parent_ID ELSE x1.ID END
AS ID
FROM T_PRO_EVENT x1
WHERE x1.DATA LIKE '%axx_func%'

gesamte Query:
60 sec !!!!!!
SELECT *
FROM T_PRO_EVENT t
WHERE ID IN (
SELECT DISTINCT CASE WHEN x1.Parent_ID > 0 THEN
x1.Parent_ID ELSE x1.ID END AS ID
FROM T_PRO_EVENT x1
WHERE x1.DATA LIKE '%axx_func%'
)

Anscheinend dauert die interne Optimierung für das WHERE ID IN () solange.
Wenn ich WHERE ID IN (122, 334, 1346, 3228) eingebe dauert es nur 0.9 msec.

Ist die Idee des SubSelectes von vorneherein blöd bei sich ändernden
Abfragen ?
Oder habe ich da einen Denkfehler ?

Ich hoffe, ihr könnt mich aufklären.
--
mfg, Wolfgang
------------------------
A-8020 Graz
Austria



[ Auf dieses Posting antworten ]

Antworten