MySQL / Rails性能:一个表,多行与多表,少行?

时间:2009-04-28 09:23:25

标签: mysql ruby-on-rails performance single-table-inheritance

在我的Rails应用程序中,我有几个处理资产的模型(附件,图片,徽标等)。我正在使用attachment_fu,到目前为止,我有3个不同的表用于在MySQL数据库中存储信息。

我想知道如果我使用STI并将所有信息放在一个表中,使用类型列并具有不同的继承类,它是否会对性能产生影响。它会更干燥,更容易维护,因为它们共享许多属性和特征。

但是什么更快?每个表有多个表,少行或只有一个有很多行的表?或者没有任何区别?我将不得不每秒处理大量信息和许多查询。

感谢您的意见!

3 个答案:

答案 0 :(得分:6)

许多表和更少的行可能更快。

这不是你应该这样做的原因:你的数据库应该为你的问题域建模。一个表是许多实体类型的不良模型。因此,您最终会编写大量代码来查找该表的子集,该子集代表您当前关注的实体类型。

定期,可接受,干净的数据库和前端客户端代码将无法正常工作,因为您的单一桌面就是所有东西,而不是任何东西。

它更慢,更脆弱,会使你的代码遍布你的应用程序,并制作一个糟糕的模型。

如果所有内容在您的问题域中具有完全相同的属性相同(或可能是Liskov可替代)语义,请执行此操作

否则,甚至不要尝试这样做。

或者,如果你这样做,请问为什么这比拥有一个大的Map / hash表/关联数组来保存应用程序中的所有实体(以及许多函数,其中大部分都是重复,剪切和粘贴,以及日期,执行switch个案例或RTTI来确定每个实体的实际类型。)

答案 1 :(得分:2)

唯一可以确定的方法是尝试这两种方法并衡量绩效。

一般而言,它取决于您是否在这些表中进行连接,如果是,则表示如何对表进行索引。一般来说,数据库连接很昂贵,这就是数据库模式有时被非规范化以提高性能的原因。这通常不会发生,直到您处理大量数据,即数百万条记录。你可能还没有遇到这个问题,也许永远不会。

答案 2 :(得分:0)

如果行具有相同的属性,那么,是的,一个表是非常好的,只有一行指定数据类型,否则,使用不同的表来处理,性能,代码量甚至是lisibility的性能更好代码以及。