Sql DataMapper方法太慢
我有两个模特,秀和插曲。我需要在数据库中保存每个节目的第一集或最后一集。我使用以下方法,但速度非常慢650ms~。你知道怎么加快速度吗Sql DataMapper方法太慢,sql,ruby,performance,sinatra,datamapper,Sql,Ruby,Performance,Sinatra,Datamapper,我有两个模特,秀和插曲。我需要在数据库中保存每个节目的第一集或最后一集。我使用以下方法,但速度非常慢650ms~。你知道怎么加快速度吗 您可以发布此创建的SQL吗?Showall生成[SELECT\id\,\name\,\tot\u Sessions\,\status\,\fansub\,\translator\,\editor\,\checker\,\timer\,\typesetter\,\encoder\,\qchecker\,\created\u at\,\Update\u at\FRO
您可以发布此创建的SQL吗?Showall生成[SELECT\id\,\name\,\tot\u Sessions\,\status\,\fansub\,\translator\,\editor\,\checker\,\timer\,\typesetter\,\encoder\,\qchecker\,\created\u at\,\Update\u at\FROM\shows\WHERE\status\=?ORDER BY\id\,\name\,[1]],而EpiodeAll生成[选择\id\,\Spidence\,\translation\,\editing\,\checking\,\timing\,\typesetting\,\encoding\,\qchecking\,\created\U at\,\Update\U at\,\show\U id\,\show\U name\FROM\Spidents\WHERE\show\U name\=?ORDER BY\id\,\Spidence\,[击血]]显然,目前每个剧集24集都会调用Episodeall。这会一直是一个OR情况吗?因此,如果一个剧集至少有一个未发布的剧集,你会想要那个。但是如果一个剧集没有任何未发布的剧集,你会想要最后一个发布的剧集吗?为了真正高效,你应该为剧集创建一个名为last_剧集的字段,它是外键to节目的最新插曲。然后,在更新插曲时,有一个回调运行,该回调确定最新插曲值是否因添加一个“完整”的新插曲或将一个不完整的插曲设置为“完整”而发生更改。或者在插曲表中,有一个布尔值的last_插曲字段,并使用相同的回调结构将其翻转插曲
def last_episodes(status)
[].tap { |e|
Show.all(status: status).each { |show|
episodes = Episode.all show_name: show.name
released = episodes.select { |e| e.complete? }
unreleased = episodes.select { |e| not e.complete? }
e << (unreleased.empty? ? released.last : unreleased.first)
}
}
end