2011-06-15 74 views

回答

10
  1. 垂直分区的大型表,以减少I/O和缓存的要求 - 单独的列,经常查询与罕见。

  2. alter table“太贵”时,向生产系统添加一列。

  3. Super-type/subtype模式。

  4. 垂直分区受益于表(连接)消除 - 提供优化器 支持它(再次减少I/O和高速缓存)。

  5. Anchor modeling - 类似4,但下降到6NF

0

是的一般。

如果您想要为列的子集分配不同的权限,可能会有一个例外。

也认为只有在双方都需要时才是如此。

0

原因之一是将频繁访问的数据放在一张表中,而在另一张表中访问的数据极少。它会运行得更快并节省一些内存。

但我必须在我做这件事之前把我的手臂拧得很厉害。

1

有时它对桌子锁非常有用。当您将一列添加到数据库时,整个表将被锁定,直到完全重写。当你的数据库有100k行时,这几乎没有影响。但如果你有100M行或1B行,这是一个完全不同的故事......

这对避免占用太多空间的死行也很有用。如果您使用的是MVCC,并且您的某些列经常被覆盖,偶尔可以将它们放在单独的表格中。可以说,自动吸尘最终会启动,但为了节省硬盘驱动器的工作,最好在单独的表格中抽出几个int字段,而不是整行文本,varchar(n)和谁知道还有什么。

最后一个原因是在ORM中滥用select *。例如,如果您要存储图片或博客帖子/文章,则可以将blob /文本字段存储在单独的表格中。因为每当它由于某个原因被加载时,ORM将加载整行。当你只需要你的图像或文章的URL时,你想要的最后一件事就是从数据库中提取整个二进制/文本;但你的ORM将做到这一点......