我在rails项目(运行在rails 2.0.5上)中出现了一些性能问题,例如在我的用户管理页面中。在Ruby on Rails应用程序中使用MySQL视图以提高性能
我的用户模型有很多关系(详细信息,地址,角色......),他们会加载一个热切的加载。这会创建真正巨大的SQL查询,在某些情况下,加载30个用户需要几分钟的时间。另一方面,删除急切的加载会产生数百个查询,最后我遇到同样的问题:加载页面很慢。
我曾经在Java上开发Oracle &对于这种用于创建视图的大型查询,然后对这些视图进行缓存以获得更快的渲染。这是非常无聊的维护,因为我不得不手动更新视图脚本等数据库字段...
但它真的有奇妙的表演....所以我想知道如果有人曾试图实施的东西在活动记录中使用Mysql视图的好处?
我只是做了一些基本的测试,这是我的看法(只是几个字段的例子,我有一个标准的宁静认证用户表,并为个人DATAS一个大表“详细信息”):
CREATE VIEW users_vs AS SELECT
users.id ,
users.login ,
users.email ,
details.last_name ,
details.first_name ,
details.phone ,
details.fax ,
FROM `users` LEFT OUTER JOIN `details` ON details.user_id = users.id ;
然后一个模型:
class UsersV < ActiveRecord::Base
end
尝试了一些东西,我的控制台:
u=UsersV.find(:first) # ok !
u=UsersV.find_by_last_name('smith') #=> ok !
us=UsersV.find_all_by_last_name('smith') #=> ok too !
在查看日志时,简单查询的处理方式与任何表查询相同
当然,这些假模型只会用于读取数据。
我想知道:
,如果有人已经尝试过了吗?
如果这是一个好主意?
我是否应该考虑像memcached的,而不是...
一分钟加载30个用户似乎很慢。您的关联中使用的所有列是否已编入索引?通常检索多少个表和行?如果你使用easger加载更少的话,会发生什么? (MySQL并不总是有效地优化多表连接) – 2009-02-09 22:50:22