刚开始使用activerecord。我只是想知道我是否在请求中进行多个查询,是否更好地存储了procudure?这样,我做了1个SQL查询,反对多个。
例如,很多时候,我检查记录是否存在,如果不存在,我创建它。这是2个查询。我可以在一个存储过程中只有1个查询。这是一种提高性能的方法吗?
由于
答案 0 :(得分:0)
存储过程将保持编译并且执行计划将保持存储,这将提高性能。如果您从应用程序中进行查询,并且它们很少,那么可能情况并非如此。
就打字而言,它的数量大致相同,只是在不同的地方。
答案 1 :(得分:0)
例如,很多时候,我检查记录是否存在,如果不存在,我创建它。这是2个查询。
DBA可能会建议你
并捕获插入重复行所导致的错误。
所有这些只需要一次往返数据库。你有来捕获错误 - 除了重复的密钥之外,还有很多东西可以防止INSERT语句成功。
另一方面,如果您的业务流程确实需要一系列SQL语句,那么编写存储过程可能是有意义的。这与“我正在制作1个SQL查询而不是多个”相反,这并不完全相同。您仍然必须执行一系列SQL语句。你传递给服务器较少,但可能并不重要。服务器仍然执行所有SQL语句。
答案 2 :(得分:0)
我不确定我是否会对此级别的性能调整感到烦恼。
就单行插入,更新,删除等而言,如果您拥有正确的索引,那么与ruby,客户端上的DOM处理,网络相比,数据库性能可能是一个非常小的性能问题。时间等等。你可能会节省几毫秒,但这不太可能是重要的。
您可能会喜欢使用以下方式节省时间:
Model.where(:blah => etc).first_or_initialize(:whatever => 'wotsit')
...以便您以后可以解决重大的性能问题。