Mailinglisten-Archive |
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