Mailinglisten-Archive |
Hallo Michael,
erstmal danke fuer deine Tipps.
>Keine Ahnung, sinnvoll waere es mal die Explains fuer beide Varianten
zu
>posten. (Bitte achte dann dabei auf den Zeilenumbruch deines Mailers
>damit kein Zeilensalat entsteht, denn Salat essen ist bei diesen hohen
>Temperaturen gefaehrlich :) ).
Variante 1 mit zuerst b_links und dann a_links (Dauer 0,03x sek.):
table type key key_len ref rows Extra
------------------------------------------------------------------------
syst_sites ALL NULL NULL NULL 9 Using
temp.
b_links ref in_link_sitestatus 1 syst_sites.site_id 11
a_links ref in_link_sitestatus 1 syst_sites.site_id 11
------------------------------------------------------------------------
Variante 2 mit zuerst a_links und dann b_links (Dauer 3,x sek.):
table type key key_len ref rows Extra
------------------------------------------------------------------------
syst_sites ALL NULL NULL NULL 9 Using
temp.
a_links ref in_link_sitestatus 1 syst_sites.site_id 11
b_links ref in_link_sitestatus 1 syst_sites.site_id 11
------------------------------------------------------------------------
Die possible_keys fuer b_links und a_links sind in beiden Varianten
jeweils un_link_url, fk_link_site und in_link_sitestatus.
Beim Explain gibt es also kaum einen Unterschied, bei der Laufzeit
allerdings schon.
>Ein ANALYZE Table waere vorher evtl sinnvoll, so dass MySql ueber die
>Verteilung der Schluesselwerte in den Tabellen besser bescheid weiss.
Danke fuer den Tipp. Habe ich gemacht, hat aber nichts gebracht. :-(
>Jo, ein count gibt die Anzahl der Werte innerhalb der angegebenen
>Gruppierung wieder, dabei ist es eigentlich Egal welche Spalte man
>nimmt, da
>auch NULL Werte gezaehlt werden. Statt dessen kann man z.B.
>SUM(IF(Spalte is
>Null,0,1)) verwenden um die Anzahl der Werte in einer Spalte zu zaehlen
>die nicht NULL sind.
Ein Test mit SUM(IF(a_links.link_id IS NULL, 0, 1)) und
SUM(IF(b_links.link_id IS NULL, 0, 1)) statt der beiden COUNTs bringt
die selben Ergebnisse. Ich habe das Gefuehl, dass das
FIND_IN_SET('neu', b_links.link_status) irgendwie nicht richtig
verwendet wird.
Daran, dass ich zwei LEFT JOINs auf die gleiche Tabelle mache, kann es
auch nicht liegen, oder?
Bin fuer alle weiteren Tipps und Hilfen sehr dankbar.
Gruss,
Ralf
--
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive