![](/img/trans.png)
[英]ActiveRecord query for joining has_and_belongs_to_many relation
[英]ActiveRecord generates expensive DESCRIBE-queries for has_and_belongs_to_many relation with MySQL
我们有一个Rails3应用程序,我们刚刚开始开发。 我们在两个模型之间使用has_and_belongs_to_many关系。 每次我们使用其中一个模型时,ActiveRecord都会在连接表上执行DESCRIBE查询,例如:
SQL (1.1ms) describe `articles_tags`
这些查询相对昂贵(即,比实际的SELECT查询慢10倍以上)并且经常执行。 它们对我来说似乎没有必要:由于has_and_belongs_to_many-relation,表格是自动生成的,因此ActiveRecord应该已经知道它的结构(只是一个article_id和一个tag_id列)。
这种行为有充分的理由吗? 如果没有,我该如何阻止它发生?
在开发模式下,服务器会不断重新创建所有类,因此您无需为每次更改重新启动服务器。 在生产中,您的模型将被缓存,不应该不断地描述表格。 在您的development.rb文件中,您将看到以下行:
config.cache_classes = false
这推动了这种行为。 它应该在production.rb中设置为true
如果您的表没有主键,它将在每个查询上运行describe。 我修复了我添加主键的问题。 即使在开发模式下也能工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.