phpbar.de logo

Mailinglisten-Archive

Eplain erklärt

Eplain erklärt

Sebastian Mendel lists at sebastianmendel.de
Die Sep 28 11:42:48 CEST 2004


Christian Ruetgers schrieb:

> Wenn ich den Query mit einem Left-Join auf "disziplin" aufbaue, bekomme ich 
> für "arbeit" und "users" ein type "ALL". Der ist nach der mySQL-Doku 
> wirklich schlecht, da dann keine Indizes zum Tragen kommen. Da aber alle in 
> die Verknüpfungen einfließenden Felder indiziert sind wunder mich das schon.
> 
> EXPLAIN
> SELECT
>          arbeit. * ,
>          disziplin.d_disziplin,
>          users.name,
>          users.vname,
>          users.aktiv AS user_aktiv
> FROM
>          arbeit,
>          users
> LEFT JOIN
>          disziplin ON arbeit.disziplin_id = disziplin.disziplin_id
> WHERE
>          disziplin.disziplin_id = "2" AND
>          arbeit.user_id = users.id
> +-----------------+--------+---------------+---------+---------+----------------.----+------+------------+
> | table           | type   | possible_keys | key     | key_len | 
> ref                 | rows | Extra      |
> +-----------------+--------+---------------+---------+---------+---------------------+------+------------+
> | arbeit          | ALL    | user_id       | NULL    |    NULL | 
> NULL                |    3 |            |
> | users           | ALL    | PRIMARY       | NULL    |    NULL | 
> NULL                |    4 | where used |
> | disziplin       | eq_ref | PRIMARY       | PRIMARY |       4 | 
> arbeit.disziplin_id |    1 | where used |
> +----------------------+--------+---------------+---------+---------+----------------+------+------------+
> 3 rows in set (0.00 sec)

die erste Tabelle (im FROM) muss imer die sein die die wenigsten 
Ergebnisse liefert, also meißtens wo sich der Datensatz befindet nachdem 
gesucht wird, in deinem Fall disziplin.disziplin_id

also sehe eine ordentliche Abfrage in deinem Fall so aus:


    SELECT `arbeit`.*,
           `disziplin`.`d_disziplin`,
           `users`.`name`,
           `users`.`vname`,
           `users`.`aktiv` AS `user_aktiv`
      FROM `disziplin`
LEFT JOIN `arbeit`
        ON `arbeit`.`disziplin_id` = `disziplin`.`disziplin_id`
LEFT JOIN `users`
        ON `users`.`id` = `arbeit`.`user_id`
     WHERE `disziplin`.`disziplin_id` = 2

grüße

-- 
Sebastian Mendel

www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime        www.sf.net/projects/phptimesheet

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive