У меня есть следующий код:Sequel запрос вызывает скрипт зависает и вызывает компьютер, чтобы замедлить
team_articles = user.npt_teams.to_a.inject({}) {|arts,team|
arts.merge({ team.name =>
NptArticle.join(:npt_authors).join(:users).join(:npt_teams).where(:npt_teams__id => team.id).to_a.uniq})
}
Это вызывает мой терминал перестает отвечать на запросы и мой Macbook, чтобы замедлить.
В mysqlworkbench он мгновенно получает ответ.
Было предложено создать более легкую версию объекта NptArticle, но я не совсем уверен, как создать версию, которая тянет меньше столбцов, поэтому любое предложение исправить эту проблему было бы здорово.
Это the table.
Сгенерированный SQL является:
SELECT * FROM `npt_articles` INNER JOIN `npt_authors` INNER JOIN `users` INNER JOIN `npt_teams` WHERE (`npt_teams`.`id` = 1)
Я хотел бы обновить версию Ruby, но я не могу. Я работаю над старой базой кода, и это версия Ruby, которую она использует. Планируется перестроить в будущем более современные инструменты, но на данный момент это то, с чем мне приходится работать.
Results от:
EXPLAIN SELECT * FROM npt_articles INNER JOIN npt_authors INNER JOIN users INNER JOIN npt_teams WHERE (npt_teams.id = 1);
Не могли бы вы включить описание таблицы и любые индексы, которые вы создали на них? –
Вам действительно нужно срочно обновить этот Ruby. Какой запрос он генерирует? Обычно здесь используется метод '.to_sql'. Использование 'merge' здесь совершенно неуместно, вы генерируете N хэшей в этом процессе. Используйте 'arts [team.name] = ...' и у вас 'arts' как последняя вещь в вашем блоке. – tadman
Можете ли вы опубликовать результат EXPLAIN SELECT * FROM npt_articles INNER JOIN npt_authors INNER JOIN пользователей INNER JOIN npt_teams WHERE (npt_teams.id = 1) – Jaydee