我想知道在MySQL数据库中拥有冗余列的最佳实践是什么。我之所以想知道这一点,是因为我的数据库中有一个用户表,但我也希望能够显示每个用户的许多统计信息。这些统计数据可能包括用户与其他模型交互的次数或他们有多少条消息。
搜索某个对象(例如消息)的所有记录以对其进行计数是否会影响性能?或者,在每次添加/删除消息时都会更新的用户表中创建一个名为total_messages的冗余列会更好?谢谢,这让我困惑了一段时间。
发布于 2009-07-24 22:35:13
我要做的是在您的数据库中创建一个view,为您提供相关信息,而不是添加冗余的列,而是添加一小段可优化的SQL代码,它在外部看起来像一个列,但它保证与您的数据保持同步。SQL优化视图的事实使得检索数据的速度非常快。
发布于 2010-02-04 14:36:17
查看Rails中的counter_caches。他们为你做这件事。
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
就像这样
class Messages < ActiveRecord::Base
belongs_to :user, :counter_cache => true
# ...
end这将要求您在messages_count的users表上有一个列(并且不需要使用messages.count)
https://stackoverflow.com/questions/1179191
复制相似问题