存储过程与多个查询(activerecord)

时间:2013-05-29 02:19:13

标签: sql ruby-on-rails ruby activerecord

刚开始使用activerecord。我只是想知道我是否在请求中进行多个查询,是否更好地存储了procudure?这样,我做了1个SQL查询,反对多个。

例如,很多时候,我检查记录是否存在,如果不存在,我创建它。这是2个查询。我可以在一个存储过程中只有1个查询。这是一种提高性能的方法吗?

由于

3 个答案:

答案 0 :(得分:0)

存储过程将保持编译并且执行计划将保持存储,这将提高性能。如果您从应用程序中进行查询,并且它们很少,那么可能情况并非如此。

就打字而言,它的数量大致相同,只是在不同的地方。

答案 1 :(得分:0)

  

例如,很多时候,我检查记录是否存在,如果不存在,我创建它。这是2个查询。

DBA可能会建议你

  • 只需插入行,或
  • 使用等效的SQL MERGE语句或
  • 使用你的dbms支持的任何其他语句(我认为ActiveRecord以某种方式实现),如REPLACE或ON DUPLICATE KEY UPDATE ......

并捕获插入重复行所导致的错误。

所有这些只需要一次往返数据库。你来捕获错误 - 除了重复的密钥之外,还有很多东西可以防止INSERT语句成功。

另一方面,如果您的业务流程确实需要一系列SQL语句,那么编写存储过程可能是有意义的。这与“我正在制作1个SQL查询而不是多个”相反,这并不完全相同。您仍然必须执行一系列SQL语句。你传递给服务器较少,但可能并不重要。服务器仍然执行所有SQL语句。

答案 2 :(得分:0)

我不确定我是否会对此级别的性能调整感到烦恼。

就单行插入,更新,删除等而言,如果您拥有正确的索引,那么与ruby,客户端上的DOM处理,网络相比,数据库性能可能是一个非常小的性能问题。时间等等。你可能会节省几毫秒,但这不太可能是重要的。

您可能会喜欢使用以下方式节省时间:

Model.where(:blah => etc).first_or_initialize(:whatever => 'wotsit')

...以便您以后可以解决重大的性能问题。