在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 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 MicsPix < ActiveRecord::Base
establish_connection(:otherdb)
def self.table_name
"whale"
end
end
是否有跳过查询的解决方案而不是我不使用?我不一定想使用ActiveRecord。
答案 0 :(得分:1)
我不确定额外的查询在哪里出现,但我有关于如何删除它们的建议
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)
然后将db连接重置为默认值。
此代码适用于我,我可以从外部数据库获取结果,只执行查询。当我试用它时,我在控制器方法中做到了这一点,但我认为它在模型中会更加整洁。据我所知,establish_connection(:otherdb)
与我制作c
时的情况相同。所以我认为你可以在你的MicsPix中写下这样的东西
def get_list
sql = "SELECT id, `whale`.`name` FROM `whale`"
connection.execute(sql)
end
这会返回和mysql res对象,它与数组非常相似但不完全相同。
问候 /阿尔宾