Queries und Performance
Hi,
habe mal wieder ne Frage zu 2 Queries, die langsam sind: Wie man diese verbessern kann! 1. Query: Code:
SELECT http://img1.myimg.de/q1ef7_thumb.jpg Indizes sind gesetzt auf: - link-cats: id - link_entries: id, cat_id, freigeschaltet, flag - own_content: id Teilweise kommen noch ein paar Where-Klauseln dazu (aber der Query so wie er da steht ist schon lahm). 2. Query: Code:
SELECT count(o.id) AS anz Wenn ihr mich hier nun fragt, warum ich die LeftJoins drin habe, wenn ich doch eh nur o.id zählen will: Weil ich teilweise eine Where-Klausel nutzte, in der ich c.id und e.flag benötige! Was kann ich nun verbessern? Danke!! |
1. : link_entries: link
2. : wenn du nur manchmal Where benutzt, dann benutzt auch nur manchmal die längere Query, is doch logisch... |
2. hab ich grad gemacht ;)
Hab einfach beim 2. Query die LeftJoins nur dann gesetzt, falls WHERE genutzt wird ;) zum Index: danke, versuch ich mal ;) |
|
Hi!
Ich glaube bald, dass man dort nicht viel machen kann. Es müssen ja alle Zeilen ausgelesen werden. Eine andere Alternative gibt es nicht. Anders würde die Sache aussehen, wenn du eine WHERE-Klausel einfügst. Oder denke ich da jetzt völlig verkehrt? Vielleicht hilft es auch in diesem Fall, den großen Join in kleinere effiziente Teile aufzusplitten. Gruß Jan |
hmm, aber imho müsste doch bei
Code:
LEFT JOIN |
@thedoc: ja, dachte ich eigentlich auch
@jan: hm, naja, weiß nicht genau, wie man das in kleinere teile aufsplitten soll. aber da es "nur" für ein adminmenü ist, ist das eventuell den aufwand nicht wert... |
in einem Forum habe ich noch einen Hinweis auf die Funktion SQL_CALC_FOUND_ROWS gefunden! Habe mal bei Google danach gesucht:
http://news.php-homepage.de/archives...OUND_ROWS.html http://dev.mysql.com/doc/refman/4.1/...functions.html unter dem Punkt 'Found rows' Eventuell werde ich das mal ausprobieren ;) Edit: 5 Kommentar von oben auf http://php3.de/mysql-num-rows besagt: Code:
I find that mysql_num_rows() overlook LIMIT clauses. |
Hi!
Zitat:
Was mir gerade noch einfällt. Hast du den Query vielleicht schonmal in einen inner Join umgeschrieben? Gruß Jan |
@Jan: Warum Limit 0, 500? Dann habe ich doch auch nicht alle Datensätze per count() oder? Inner Join, was genau ist das? :) Bzw wenn ich einen LEFT JOIN nutzte, darf ich dann einfach einen Inner Join draus machen?
Ich habe nun mal das mit dem SQL_CALC_FOUND_ROWS bei einem anderen Script versucht, hat bestens funktioniert! Dies werde ich eventuell auch hier demnächst mal versuchen ;) |
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:29 Uhr. |
Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
© Dirk H. 2003 - 2023