【发布时间】:2011-03-21 03:58:07
【问题描述】:
所以我刚开始使用 RAILS。我只知道够危险。
我有一堆模型在做非常简单的查询,大部分是通过脚手架生成的。我有一个遗留数据库,其中大部分已经兼容 Rails。一切都有索引。数据库并不庞大,但意义重大。
在一个模型上,我只是简单地做了一个 .all 并且它花了很长时间,当然该表有大约 400,000 行。话虽如此,在 Mysql 中它的速度要快得多。我拿了同一张桌子,然后试图得到大约 100 个结果,这可能需要几分钟。 mysql 中的相同查询只用了不到一秒钟。当我检查控制台时,我看到它完成后:
节点负载 (0.4ms) SELECT
nodes.* 来自nodes哪里(nodes.id= 276645) 限制 1 个缓存 (0.0ms) 选择profiles.* 来自profiles在哪里 (profiles.id= 0) 限制 1 个缓存 (0.0ms) 选择points.* 来自points在哪里(points.id= 19404) 限制 1 个
一遍又一遍。当查询没有返回任何东西时(换句话说,我有一些逻辑不正确),它非常快。我认为它不是在做“加入”,而是单独查询或查询相关模型。想法?
模型看起来像这样:
class Trigger < ActiveRecord::Base
def self.table_name() "w_trigger" end
belongs_to :node
belongs_to :profile
belongs_to :point
scope :within, lambda{|up,down,left,right| joins(:point).where('`points`.`lat` <= ? AND `points`.`lat` >= ? AND `points`.`lon` <= ? AND `points.`.`lon` >= ?',up,down,left,right)}
end
【问题讨论】:
标签: mysql ruby-on-rails