mysql индексы для запроса - PullRequest
3 голосов
/ 17 июля 2010

Какие индексы я должен установить для такого запроса? спасибо

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

Ответы [ 2 ]

3 голосов
/ 17 июля 2010

Общее правило - иметь индексы для столбцов, по которым вы фильтруете свой набор результатов. Другими словами, столбцы, включенные в предложение WHERE, и столбцы, для которых выполняются объединения.

Для конкретного запроса вы можете обратиться к плану объяснения запроса. Он покажет вам, как MySQL выполняет запрос, поэтому может настроить ваши индексы соответствующим образом: http://dev.mysql.com/doc/refman/5.0/en/explain.html

0 голосов
/ 17 июля 2010

Я бы установил их на

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

поскольку они все появляются в одном из предложений JOIN, WHERE или ORDER BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...