![]() |
Datenbank: MySql • Version: 5.0.xx • Zugriff über: PhP
MySQL Subselect, beschleunigen wie
hi,
dieses select statment:
SQL-Code:
lasse ich laufen was auch das richtige ergebniss bringt. jedoch ist die performance eher schlecht.
SELECT
m.ben_user,m.ben_img,m.ben_resu,m.ben_typ,m.mem_typ from tab2 m where m.ben_resu = ( SELECT MAX(i.ben_resu) FROM tab2 i WHERE m.ben_user = i.ben_user and i.ben_typ='mem' and i.mem_typ='d3' ) ORDER BY m.ben_resu desc umfeld: mysql v5.0.xx wie könnte ich das beschleunigen? gruss alice |
Re: MySQL Subselect, beschleunigen wie
Versuch es mal in statt = oder mit einem Join statt Subselect
|
Re: MySQL Subselect, beschleunigen wie
hi,
Zitat:
wie müsste das ganze per join aussehen? |
Re: MySQL Subselect, beschleunigen wie
Deine Abfrage ist soweit ok.
Den IN-Operator sollte man niemals verwenden, wenn eine zweite Verknüfung zwischen den Abfragen bestehe, da geht die Performance dann richtig in den Keller. Unveränderte Abfrage, nur mal ohne Augenkrebs...
SQL-Code:
Wie sieht der Aufbau deiner Tabelle aus? Primärschlüssel vorhanden? Eventuell einen Index angelegt?
SELECT ben_user, ben_img, ben_resu, ben_typ, mem_typ
FROM tab2 m WHERE ben_resu = (SELECT MAX(ben_resu) FROM tab2 WHERE ben_user = m.ben_user AND ben_typ = 'mem' AND mem_typ = 'd3') ORDER BY ben_resu DESC |
Re: MySQL Subselect, beschleunigen wie
hi,
Zitat:
Code:
wenn ich mir das per Explain ansehe:
PRIMARY KEY (`ID`),
KEY `ix_composite1` (`BEN_RESU`,`BEN_USER`,`BEN_TYP`,`MEM_TYP`), KEY `ix_composite2` (`BEN_USER`,`BEN_TYP`,`MEM_TYP`), KEY `ix_composite3` (`BEN_USER`,`BEN_RESU`,`BEN_TYP`), KEY `ix_composite4` (`BEN_RESU`,`BEN_USER`,`BEN_TYP`)
Code:
ich bin mir nicht sicher ob so optimal ist?
select_type;table;type;possible_keys;key;key_len;ref;rows;Extra
PRIMARY;m;ALL;null;null;null;null;1177,000000;Using where; Using filesort DEPENDENT SUBQUERY;tab2;ref;ix_composite2,ix_composite3;ix_composite2;207;usr_web30_1.m.BEN_USER,const,const;2,000000;Using where wie ist dieser output via explain zu verstehen? wäre ein join schneller? und wie müsse diese abfrage als join aussehen? thx |
Re: MySQL Subselect, beschleunigen wie
Hi
Ohne Gewähr...vielleicht mit einem Group-By? Wenn ich deine Anfrage richtig verstehe kommt doch nur ein Datensatz als Ergebnis raus oder? Weil du ja das Maxiale Element von ben_resu abfragst... wofür ist dann das Order-By? Also so würdest du garkeinen join brauchen:
SQL-Code:
Sollte schneller sein, oder ich hab deine Abfrage nicht richtig verstanden. Vielleicht zeigst du uns mal die Struktur der Tabelle?
SELECT ben_user, ben_img, ben_resu, ben_typ, mem_typ
FROM tab2 WHERE ben_typ = 'mem' AND mem_typ = 'd3' GROUP BY ben_resu HAVING MAX(ben_resu) [ORDER BY ben_resu DESC] Gruß zack0r |
Re: MySQL Subselect, beschleunigen wie
hi,
Zitat:
damit hole ich mir nur den max wert (ben_resu) vom jeweiligen ben_user in die query-menge. deshalb auch das order by. im erg. sind alle ben_user mit dem jeweiligen max wert (ben_resu), also einem satz pro ben_user, die auf das kriterium " ben_typ = 'mem' AND mem_typ = 'd3' " passen. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz