phpbar.de logo

Mailinglisten-Archive

Abfragen optimieren

Abfragen optimieren

Ralf Eggert mysql-de_(at)_lists.bttr.org
Mon, 29 Oct 2001 13:50:30 +0100


Hallo Liste,

bin gerade dabei, die MySQL Abfragen beim Ueberarbeiten meiner Website
zu optimieren. Habe auch schon sowohl das Manual als auch das Buch von
Paul Dubois zum Thema Indizes und Abfragenoptimierung durchgelesen.
Dennoch scheitere ich bei einigen Abfragen daran, dass die erstellten
Indizes einfach nicht verwendet werden. Vielleicht hat jemand ja ein
paar generelle Tipps fuer kompliziertere Abfragen (also komplizierter
als die groesstenteils einfachen Beispiele aus dem Manual oder dem
Buch)?

Hier ein konkretes Beispiel (habe einige davon) ;-)...

  SELECT art_id, art_title, ar2ga_gal_id 
  FROM t2_cms_article, t2_cms_ar2ga 
  WHERE art_geo_id = 1 
  AND FIND_IN_SET('booktip', art_status) 
  AND art_id = ar2ga_art_id 

Ein Explain ergibt folgendes Ergebnis:

=======================================================================
table           t2_cms_article            t2_cms_ar2ga
=======================================================================
type            ref                       ALL
possible_keys   PRIMARY,                  index_ar2ga_art_id,
                index_art_geo_id,         index_ar2ga_art_id_gal_id
                index_art_geo_id_status
key             index_art_geo_id_status   NULL
key_len         2                         NULL
ref             ???                       NULL
rows            16                        1178
Extra           where used                range checked for each 
                                          record (index map: 18)
=======================================================================

Ein Index fuer die Tabelle "t2_cms_article" wird also verwendet wie
vorgesehen. Leider wird aber keiner der beiden moeglichen Indizes fuer
die Tabelle "t2_cms_ar2ga" verwendet. Insgesamt werden nach meinem
Verstaendnis also 16 * 1178 Rows gelesen, was ich natuerlich
einschraenken moechte. 

Die Tabelle "t2_cms_ar2ga" ist wie folgt aufgebaut:

=======================================================================
Feld          Typ          Attribute  Null  Standard  Extra
=======================================================================
ar2ga_id      smallint(5)  UNSIGNED   Nein  0         auto_increment 
ar2ga_art_id  smallint(5)  UNSIGNED   Nein  0
ar2ga_gal_id  mediumint(8) UNSIGNED   Nein  0
ar2ga_status  set('main')             Nein
=======================================================================

Die Tabelle hat insgesamt genau 1178 Eintraege. Ein Index liegt auf dem
Feld "ar2ga_art_id", ein weiterer auf "ar2ga_gal_id" und noch einer auf
"ar2ga_art_id" und "ar2ga_gal_id". Ich weiss, dass der einfache auf
"ar2ga_art_id" im Prinzip ueberfluessig ist, ich teste aber im Moment
mit unterschiedlichen Indizes herum.

Wer hat sich schon mal intensiver mit der Optimierung von Abfragen
beschaeftigt und hat evtl. eine Idee, woran es liegen kann, dass keiner
der vorhandenen Indizes verwendet wird?

Danke schon mal im Voraus.

Gruss,

        Ralf

-- 
__________________________________________
 In-Greece.de - die Griechenlandcommunity
_______ http://www.in-greece.de/ _________

---
!!NEU!!
Fragen und Antworten zu MySQL und dieser Liste unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive