2010-07-17 3 views
3

어떤 쿼리를 이런 쿼리에 설정해야합니까? 감사합니다.쿼리에 설정할 mysql 인덱스

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 
+1

super_kind_en, day, cores.searchable – Sarfraz

답변

3

일반적인 규칙은 결과 집합을 필터링하는 열에 인덱스를 갖는 것입니다. 즉, WHERE 절에 포함 된 열과 조인을 수행하는 열.

특정 u 리의 경우, u 리의 Explain 플랜을 참조 할 수 있습니다. 그것은 MySQL이 쿼리를 실행하는 방법을 보여줍니다, 그래서 그에 따라 인덱스를 설정할 수 있습니다 http://dev.mysql.com/doc/refman/5.0/en/explain.html

+0

ORDER BY 및 SELECT로 인덱스 사용을 트리거 할 수 있습니다. 특히 JOIN 기준은 색인 작성을 검토해야합니다. –

0

내가

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 

에 그들을 설정합니다 그들은 모두 가입, WHERE 또는 ORDER BY 당신이 중 하나에 나타나는 조항.