为什么我要在表中分隔freq使用/未使用的列?

时间:2010-06-25 20:51:58

标签: sql mysql

我已经提到过,我应该将经常使用的列与不经常使用的列分开。为什么呢?

是否因为具有较少列的表对缓存更好?是否有优化缓存所有列而不是选择?这是经常阅读的表吗?我应该将freq写入列分隔到它们自己的表中吗?

4 个答案:

答案 0 :(得分:2)

这通常与不使父表太宽而导致分页中出现问题(以及可能的完整性问题,因为它可能突然发现您无法存储记录,因为它比行的字节数更宽)大小将允许。)阅读有关数据库如何在特定数据库中的页面中存储记录的信息,您将了解为什么经验丰富的设计人员通常首选较少的宽表。创建较小宽度表的一种方法是将较少使用的信息移动到与初始表具有一对一关系的表。

答案 1 :(得分:1)

更新行时,许多数据库将复制整行。根据行的副本持续多长时间(这取决于许多因素),您可能会在数据库中产生更多垃圾,而不是将行分成两个表。这种垃圾会使数据库变大,因此可能会使查询变慢。

您是否希望通过非规范化过早优化(您可能需要做的就是获得可以从拆分中获益的行),无论如何都应该考虑这些。

答案 2 :(得分:1)

RL用例将具有详细信息视图(一次显示1条记录以及所有详细信息)和相同项目的列表视图。

建议分离列表视图字段,因为它允许有效使用磁盘缓存功能:

  • 磁盘缓存可以通过复制比程序要求更多的数据来预读,假设接下来需要以下连续数据段。

答案 3 :(得分:0)

我没有听说过这个,虽然猜它可能有些道理。检索表时,必须将数据加载到服务器上的内存中。如果您有经常访问的列和在同一个表中经常访问的列,那么可以想象没有精心设计的查询,所有这些都将被加载到内存中。如果发生这种情况,通过将经常访问的数据移动到另一个表中,可以减少加载到内存中的数据量。

我不知道MySQL究竟是如何在基础级别上进行所有搜索的,但我认为如果在选择而不是*时使用列的名称,那么这个问题将被最小化。

同样,我不知道如何对所有这些进行编码的详细信息,但只要您不选择不需要的列,我认为这不应该是一个问题。