phpbar.de logo

Mailinglisten-Archive

Eplain erklärt

Eplain erklärt

Christian Ruetgers chr at 1komma6.com
Die Sep 28 10:55:32 CEST 2004


Hi Liste,

Ich komme mit dem EXPLAIN Befehl nicht so ganz klar.

Ich beschreibe mal eine einfache Struktur und hänge darunter zwei 
verschiedene Querys auf die exakt gleichen Daten mit der Ausgabe von Explain.

users.id  1:n  arbeit.user_id
arbeit.disziplin_id  1:n  disziplin.disziplin_id

Zu einem Eintrag in "users" existiert immer mindestens ein Eintrag in 
"arbeit".
Zu einem Eintrag in "arbeit" kann 0-n Einträge in "disziplin" gehören.


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.

Wenn ich den Query mit einem inner Join ausführe sieht die Ausgabe deutlich 
besser aus. (siehe zweites Beispiel).

Kommentare / Hilfe / Unterstürzung / Tipps / Meinung ???


danke,


(Beispiel 1)
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)




(Beispiel 2)
EXPLAIN
SELECT
         arbeit. * ,
         disziplin.d_disziplin,
         users.name,
         users.vname,
         users.aktiv AS user_aktiv
FROM
         arbeit,
         disziplin,
         users
WHERE
         arbeit.disziplin_id = disziplin.disziplin_id and
         disziplin.disziplin_id = "2" AND
         arbeit.user_id = users.id
+-------------+--------+--------------------------+------------------+---------+----------------+------+-------+
| table       | type   | possible_keys            | key              | 
key_len | ref            | rows | Extra |
+-------------+--------+--------------------------+------------------+---------+----------------+------+-------+
| disziplin   | const  | PRIMARY                  | 
PRIMARY          |       4 | const          |    1 |       |
| arbeit      | ref    | user_id,arbeit_disziplin | arbeit_disziplin 
|       4 | const          |    1 |       |
| users       | eq_ref | PRIMARY                  | 
PRIMARY          |       4 | arbeit.user_id |    1 |       |
+-------------+--------+--------------------------+------------------+---------+----------------+------+-------+
3 rows in set (0.00 sec)



-- 
Christian Ruetgers - Geschäftsführung Projekte / Technik
1komma6 - Multimediale Dienstleistungen GmbH
Fon: (0251) 57 29-7
Fax: (0251) 57 29-6
eMail: ch.ruetgers at 1komma6.com
Mobil: 0173/860 28 93

visit http://www.1komma6.com

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


php::bar PHP Wiki   -   Listenarchive