phpbar.de logo

Mailinglisten-Archive

Sonderbares Verhalten bei einem SELECT

Sonderbares Verhalten bei einem SELECT

Ralf Eggert ralf at in-greece.de
Die Aug 5 13:57:41 CEST 2003


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