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

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

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

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

感谢您的意见!

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

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

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

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

当所有事物在您的问题域中具有完全相同的属性相同(或可能是Liskov可替代)语义时才这样做。

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

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

确切知道的唯一方法是尝试两种方法并测量性能。

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

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