3 Stimmen

zu setzende mysql-Indizes für eine Abfrage

Welche Indizes muss ich für eine Abfrage wie diese setzen? danke

SELECT distinct event_dates.* FROM `event_dates` 
INNER JOIN `events` ON `events`.id = `event_dates`.event_id 
INNER JOIN `cores` ON `cores`.resource_id = `events`.id AND cores.resource_type = 'Event' 
INNER JOIN `cores_kinds` ON `cores_kinds`.core_id = `cores`.id 
INNER JOIN `kinds` ON `kinds`.id = `cores_kinds`.kind_id 
WHERE (((super_kind_en IN ('party','cinema and theater')) 
AND (day >= '2010-07-17' AND day <= '2010-08-16')) 
AND (cores.searchable like '%p%')) 
ORDER BY day, cores.vote desc LIMIT 0, 30

3voto

Victor Welling Punkte 1817

Als Faustregel gilt, dass Sie Indizes auf Spalten haben sollten, nach denen Sie Ihre Ergebnismenge filtern. Mit anderen Worten: Spalten, die in der WHERE-Klausel enthalten sind, und Spalten, für die Sie Joins durchführen.

Für eine bestimmte Abfrage können Sie sich auf den Explain-Plan der Abfrage beziehen. Er zeigt Ihnen, wie MySQL die Abfrage ausführt, so dass Sie Ihre Indizes entsprechend einrichten können: http://dev.mysql.com/doc/refman/5.0/en/explain.html

0voto

JochenJung Punkte 7080

Ich würde sie auf

events.id
event_dates.event_id 
cores.resource_id
events.id
cores.resource_type
cores_kinds.core_id
cores.id 
kinds.id
cores_kinds.kind_id
super_kind_en
day
cores.searchable
cores.vote

da sie alle entweder in einer der JOIN-, WHERE- oder ORDER BY-Klauseln vorkommen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X