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