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
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
- Christian Kirsch (03.07.2008 16:33)
- Wolfgang Maier (03.07.2008 19:31)
- Christian Kirsch (03.07.2008 20:34)
- Claus Reibenstein (03.07.2008 17:05)
- Wolfgang Maier (03.07.2008 19:37)
- Claus Reibenstein (04.07.2008 07:36)
- Claus Reibenstein (05.07.2008 22:03)
- Wolfgang Maier (06.07.2008 10:46)
- Dieter Nöth (04.07.2008 08:55)
- Wolfgang Maier (06.07.2008 10:53)
