Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql DataMapper方法太慢_Sql_Ruby_Performance_Sinatra_Datamapper - Fatal编程技术网

Sql DataMapper方法太慢

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

我有两个模特,秀和插曲。我需要在数据库中保存每个节目的第一集或最后一集。我使用以下方法,但速度非常慢650ms~。你知道怎么加快速度吗


您可以发布此创建的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