【发布时间】:2021-04-26 22:04:06
【问题描述】:
我有两个双重连接(我相信这就是他们会考虑的),单独执行它们似乎非常慢。我知道关于单个查询是否比多个查询更快以及反之亦然存在争议,但我愿意尝试任何事情。
这是我现有的陈述:
line_stops = OpsHeader.joins(
ops_stop_rec: :driver_header
)
.select(
:pbbname,
:pb_net_rev,
:ops_driver1,
:pb_id,
:ops_stop_id,
:dh_first_name,
:dh_last_name,
:ops_delivered_time
)
.where(
:ops_stop_rec => {
ops_arrive_time: params[:startDate] .. params[:endDate]
})
line_items = OpsHeader.joins(
ops_stop_rec: :ops_line_items
).select(
:pbbname,
:opl_amount,
:pb_id,
:ops_type,
:ops_stop_id,
:ops_order_id,
:ops_driver1,
:ops_delivered_time
)
.where(
:ops_stop_rec => {
ops_arrive_time: params[:startDate] .. params[:endDate]
}
)
仅供参考,我是从旧的 Firebird 数据库中提取这些,并且服务器硬件也不一定很快,所以可能比我想象的要多。此外,在将数据提供给客户之前,我必须在此之上进行数据操作。
无论如何,这是我的联想:
class OpsHeader < ApplicationRecord
belongs_to :pb_bill
belongs_to :pb_master
has_many :ops_stop_rec, foreign_key: 'ops_order_id'
self.table_name = 'OPS_HEADER'
self.primary_key = 'pb_id'
end
class OpsStopRec < ApplicationRecord
#belongs_to :ops_order
#belongs_to :ops_im_equip
belongs_to :ops_header, foreign_key: 'pb_id'
belongs_to :driver_header, foreign_key: 'ops_driver1'
has_many :ops_line_items, foreign_key: 'opl_stop_id'
self.table_name = 'OPS_STOP_REC'
self.primary_key = 'ops_stop_id'
end
class OpsLineItem < ApplicationRecord
#belongs_to :opl_order
#belongs_to :opl_stop
belongs_to :ops_stop_rec, foreign_key: 'ops_stop_id'
self.table_name = 'OPS_LINE_ITEMS'
self.primary_key = 'opl_stop_id'
end
class DriverHeader < ApplicationRecord
#belongs_to :dh_paythru
has_many :ops_stop_rec, foreign_key: 'ops_driver1'
self.table_name = 'DRIVER_HEADER'
self.primary_key = 'dh_id'
end
【问题讨论】:
-
“旧火鸟数据库” - 几岁了?什么是数据库版本?您可以将其克隆到开发环境并将服务器升级到 firebird 2.5 吗? “服务器硬件不一定很快” Groton/Interbase/Firebird 是在 1970 年代构想出来的,当时 RAM 非常昂贵且非常稀缺。您可以在 ib-aid.com 上考虑优化的、RAM 宽松的 Firebird 配置和有关手动优化的文章
-
你能在你的服务器上运行这个查询吗? - dbfiddle.uk/?rdbms=firebird_3.0 - 如果我的记忆还好,它会从 FB 2.0 开始工作,但在 FB 1.x 上会失败
标签: ruby-on-rails ruby activerecord firebird