【问题标题】:ActiveRecord generates expensive DESCRIBE-queries for has_and_belongs_to_many relation with MySQLActiveRecord 为 has_and_belongs_to_many 与 MySQL 的关系生成昂贵的 DESCRIBE 查询
【发布时间】:2011-07-18 21:12:37
【问题描述】:

我们有一个刚刚开始开发的 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 列)。

这种行为有充分的理由吗?如果没有,我该如何阻止它发生?

【问题讨论】:

    标签: mysql ruby-on-rails performance activerecord


    【解决方案1】:

    如果您的表没有主键,它将在每个查询上运行 describe。我修复了我的添加主键。即使在开发模式下也能工作。

    【讨论】:

      【解决方案2】:

      在开发模式下,服务器会不断地重新创建所有类,因此您不必每次更改都重新启动服务器。在生产中,您的模型将被缓存,并且不需要不断地描述表。在你的 development.rb 文件中,你会看到这一行:

      config.cache_classes = false
      

      这是驱动这种行为的原因。在production.rb中应该设置为true

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-23
        • 2012-02-02
        • 2015-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多