Way*_*ina 9 mysql stored-procedures ruby-on-rails
正如我在上一篇文章中所说,我们的Rails应用程序必须与我们从中提取数据的第三方应用程序中的EAV类型的表进行交互.我创建了一个View以使数据正常,但运行时间过长.我们有一位离岸PHP开发人员创建了一个存储过程来帮助加快速度.
现在我们遇到了我们需要从Rails应用程序调用此存储过程以及提供搜索和过滤的问题.视图可以这样做,因为Rails将其视为传统的Rails模型.我怎么能用存储过程做到这一点?我们需要编写自定义搜索和排序(我们使用的是Searchlogic)吗?管理层无法理解使用Rails存储过程的缺点; 他们所说的是目前的方法加载数据需要很长时间,需要修复,但搜索和过滤是关键功能.
编辑我在这里发布了这个查询的代码:优化一个奇怪的MySQL查询.有趣的是,当我在GUI(Navicat)中运行此查询时,它运行大约5秒钟,但在网页上运行需要一分钟; 由于我在原帖中概述的原因,视图很复杂,但我认为MySQL会优化和缓存像SQL Server这样的视图(或者更确切地说,我是如何阅读SQL Server的),以提高性能.
您可以从Rails调用存储过程,但是您将失去ActiveRecord的大部分好处,因为标准生成的SQL将无法工作.您可以使用本机数据库连接并调用它,但它将是一个漏洞的抽象.您可能需要考虑DataMapper.
回顾上一个问题,我会让DBA创建一个触发器,从数据中创建一个更多的关系结构.触发器会将EVA数据插入到表中,这是我知道在MySQL中实现物化视图的唯一方法.这样,您只需在插入时支付小的增量后台成本,并且应用程序可以正常运行.
无论如何...
ActiveRecord::Base.connection.execute("call SP_name (#{param1}, #{param2}, ... )")
Run Code Online (Sandbox Code Playgroud)
但是在灯塔上有一张开放的票据,表明这种方法可能无法改变一些参数来使用连接.