Я надеюсь, что это подходящее место, чтобы задать мой вопрос.
Мой запрос MySQL в настоящее время выглядит так
@records = Record.find(:all, :select => "`records`.id, records.level as level,
(SELECT (count( b.id ) + 1)
FROM records as a, records as b
WHERE a.id = records.id and b.skill > a.skill and b.created_at ='#{vandaag}' ) as ranktoday,
(SELECT (count( a1.id ) + 1)
FROM records as a1, records as b1
WHERE a1.id = timestamp1.id and b1.skill > a1.skill and b1.created_at ='#{timestamp1}' ) as ranktimestamp1,
records.skill as skill, worlds.title as world, chars.name as name, vocs.voc as vocation, timestamp1.skill as timestamp1",
:conditions => ["`s1`.title = :skill AND `records`.created_at = :vandaag ", {:skill => params[:id], :vandaag => vandaag, :timestamp1 => timestamp1}],
:joins => "
LEFT OUTER JOIN `skilltypes` as `s1` ON `s1`.id = `records`.skilltype_id
LEFT OUTER JOIN `records` as `timestamp1` on `timestamp1`.character_id = `records`.character_id and `timestamp1`.created_at = '#{timestamp1}'
LEFT OUTER JOIN `characters` as `chars` ON `chars`.id = `records`.character_id
LEFT OUTER JOIN `vocations` as `vocs` ON `vocs`.id = `chars`.vocation_id
LEFT OUTER JOIN `worlds` ON `worlds`.id = `chars`.world_id",
:limit => "500",
:order => "`records`.skill DESC"
Для меня это довольно длинный запрос, и я боюсь, что все эти объединения вызывают мои проблемы.
И если я прав, оператор order заставляет mysql объединять все записи с таблицами, и после этого получают только первые 500 вместо того, чтобы сначала упорядочивать записи, ограничивая, а затем начав присоединяться к ним. Вы понимаете?
И проблема не была бы такой большой, если бы у меня было только 1000 записей, но в настоящее время я получаю 380000 записей, и ежедневно я получаю еще 21000 записей.
Мой реальный вопрос: как мне узнать, лучше ли разделять объединения в разных запросах mysql?
Или мой запрос mysql просто беспорядок и работает над вашими смехотворцами и заставляет меня выглядеть как дурак?
Я застрял здесь, так как время загрузки ужасно.
Привет, Риккерт
Edit:
И у меня есть индексы на characters.world_id, characters.vocation_id, records.character_id, records.skilltype_id, records.skill, records.world_id, которые, я думаю,
должно быть достаточно Greetz, Rikkert