w jednym z moich projektow mam problem z zapytaniem.
robie tak:
@news = News.paginate(:page => params[:page], :per_page => 20, :conditions => [“news_translations.locale = ?”, “de”], :include => [:news_images, :translations], :conditions => [“category IN (?)”, [“XX”, “YY”]])
generowane sa dwa zapytania.
Z tym pierwszym jest klopot:
SELECT DISTINCT news
.id FROM news
LEFT OUTER JOIN news_translations
ON news_translations.news_id = news.id WHERE (news_translations.locale = ‘de’ and news_translations.finished = 1 and category IN (‘XX’,‘YY’)) ORDER BY news.id DESC LIMIT 0, 20;
distinct powoduje, ze mysql kopiuje dane do pomocniczej tabeli, co przy 2000 rekordow w tabeli news trwa ponad 0,3 sekundy.
usuniecie warunku na locale = “de” i news_translations.finished tez mocno poprawia dzialanie, ale wtedy w wynikach mam tez nieskonczone tlumaczenia, czego chcialbym uniknac.
dodam, ze probowalem z group by i joins, ale efekty niezadowalajace.
indeks zalozony na tabeli news_translations na pare (locale, news_id).
wielkie dzieki za wszystkie sugestie.