使用行为优化查询
我在我的项目上使用行为作为标签。 但是,加载所有标签大约需要80秒。
我在run_controller中添加了急切的加载,但它不起作用。 这是一段代码:
def index
@runs = Measurement.includes(:tags).order( "run_name DESC" ).group( :run_name )#.descending #.order_by( :run => 'desc' )
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @runs }
end
end
我正在使用tag-list来支持显示标签,这是由act-as-taggable-on支持的。 因此,使用“测量”上的急切加载对性能没有影响。 以下两个是stackflow中的相关问题:1. acts_as_taggable_on:如何优化查询? 2.通过acts_as_taggable_on优化查询
我查看了日志文件,发现最耗时的部分是加载标签,比如
ActsAsTaggableOn ::标记加载(69.9ms)SELECT tags
。* FROM tags
INNER JOIN taggings
ON tags
。 id
= taggings
。 tag_id
WHERE taggings
。 taggable_id
= 223866 AND taggings
。 taggable_type
='测量'AND(taggings.context ='tags'AND taggings.tagger_id IS NULL)
ActsAsTaggableOn ::标记加载(70.2ms)SELECT tags
。* FROM tags
INNER JOIN taggings
ON tags
。 id
= taggings
。 tag_id
WHERE taggings
。 taggable_id
= 223854 AND taggings
。 taggable_type
='测量'AND(taggings.context ='tags'
它有数千个查询来加载标签,每个查询花费大约0.07s。 以下代码正用于显示标签。
= form_for (run), :remote => true, :method => :put, :html => { :class => "myform"} do |f|
=f.text_field :tag_list, :class => "tags"
任何帮助? 谢谢。
已考虑切换到https://github.com/tmiyamon/acts-as-taggable-array-on。 你将需要使用postgres作为你的数据库。
看看这个http://adamnengland.wordpress.com/2014/02/19/benchmarks-acts-as-taggable-on-vs-postgresql-arys
我今天刚刚遇到了这个。 只要您不使用tag_list
方法,您就可以通过tags
关联进行加载。
这里和这里提到
链接地址: http://www.djcxy.com/p/35937.html上一篇: optimize the query using acts
下一篇: ruby on rails