Ruby on rails 跳过ActiveRecord发出的额外请求
在rails应用程序中,我对外部数据库执行一些请求。在newrelic中,当我查看SQL请求时,我有以下几点:Ruby on rails 跳过ActiveRecord发出的额外请求,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,在rails应用程序中,我对外部数据库执行一些请求。在newrelic中,当我查看SQL请求时,我有以下几点: 2.997 718 ms SHOW FULL FIELDS FROM `whale` 3.717 721 ms SHOW VARIABLES WHERE Variable_name = 'character_set_client' 4.440 728 ms SHOW TABLES LIKE 'whale' 5.169 668 ms
2.997 718 ms SHOW FULL FIELDS FROM `whale`
3.717 721 ms SHOW VARIABLES WHERE Variable_name = 'character_set_client'
4.440 728 ms SHOW TABLES LIKE 'whale'
5.169 668 ms SHOW CREATE TABLE `whale`
5.839 731 ms SELECT id, `whale`.`name` FROM `whale`
如您所见,所有请求都需要很长时间,因此我希望尽量减少它们。我只需要最后的结果
这是我的简单控制器:
class AnimalsController < ApplicationController
def index
MicsPix.pluck(:id, :name)
render text: 'ok'
end
end
class AnimalsController
我的模型是:
class MicsPix < ActiveRecord::Base
establish_connection(:otherdb)
def self.table_name
"whale"
end
end
类MicsPix是否有一种方法可以跳过我没有使用的查询?我不一定要使用ActiveRecord。我不确定额外的查询出现在哪里,但我有一个如何删除它们的建议
c = ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:host => "localhost",
:username => "root",
:password => "",
:database => "mydatabase"
)
sql = "SELECT id, `whale`.`name` FROM `whale`"
res = c.connection.execute(sql)
然后将数据库连接重置为默认值
这段代码适用于我,我可以从外部数据库获得结果,只执行查询。当我尝试它时,我在控制器方法中这样做了,但我认为它在模型中会更整洁。据我所知,建立连接(:otherdb)
的操作与我生成c
时的操作相同。所以我想你可以在你的MicsPix里写这样的东西
def get_list
sql = "SELECT id, `whale`.`name` FROM `whale`"
connection.execute(sql)
end
这将返回和mysql res对象,该对象与数组非常相似,但不完全相同
问候
/Albin+1自己编写sql的好例子。额外的数据库请求使AR能够获取关于数据库的元数据。大概AR的好处超过了它的成本。如果您只想执行一个简单的查询,那么您可以自己生成SQL,如Albin所示。