如何在Ruby pg gem中使用send_query
类的公共实例方法PG::Connection
?
它可以帮助加快像这样的程序的执行时间吗?
a = [1,2,3,4,5,6,...,100000] # elements in no specific order
conn = PG.connect(OMITTED)
conn.transaction do |conn|
a.each do |i]
conn.exec("INSERT INTO numbers VALUES ($1)",[i])
end
end
假设:如果我不等待结果,那么我可以继续向PostgreSQL服务器发送查询并尽快完成。
实验:重写版本:
a = [1,2,3,4]
conn = PG.connect(OMITTED)
conn.setnonblocking(true)
conn.transaction do |conn|
a.each do |i]
conn.send_query("INSERT INTO numbers VALUES ($1)",[i])
end
end
结果:运行时间无差异。
其他一些问题:
答案 0 :(得分:3)
您是否尝试将所有SQL插件合并为一个?在我的实验中它更快:
require "rubygems"
require "pg"
a = (0...10000).sort_by(&:rand) # elements in no specific order
conn = PG.connect(:dbname => "numbers")
t = Time.now
conn.transaction do |conn|
a.each do |i|
conn.exec("INSERT INTO numbers VALUES ($1)",[i])
end
end
p Time.now - t
t = Time.now
conn.transaction do |conn|
conn.exec(
a.map { |i|
"INSERT INTO numbers VALUES (%d);" % i
}.join("")
)
end
p Time.now - t
#=> 2.658903, 0.572997