首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -根据被访问的频率来拆分一个大表?

问SQL -根据被访问的频率来拆分一个大表?
EN

Stack Overflow用户
提问于 2015-07-27 17:05:46
回答 2查看 569关注 0票数 1

我有一张有50个字段的桌子:

  1. 10个几乎总是需要的领域。
  2. 很少需要的40个领域。

我粗略地说,需要比(2)中的字段更频繁地访问(1)中的字段。

我应该把它们分割成一对一关系的两张桌子,还是把它们都放在同一张桌子上?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-27 17:44:00

您所描述的过程有时被称为“垂直分区”。到了一个极端(每个垂直分区一列),这就是列数据库存储数据的方式。不幸的是(据我所知),Postgres目前没有对垂直分区的直接支持。

将数据分割成两个表的想法是很好的。我要指出以下几点:

  • 您需要修改使用额外列的查询以使用第二个表。(您可以将join包装到视图中,以便在需要额外列时使用该视图。)
  • 如果两个表都有一个连接它们的群集主键,那么join应该非常快。
  • 如果要插入/更新/删除数据,则需要注意同步。我认为您可以在合并表的视图上使用INSTEAD OF触发器来处理这个问题。
  • 如果有些记录没有额外的列,这在空间方面可能是一个巨大的胜利。
  • 如果所有记录和所有列都要加载到缓存中,那么这可能不是什么大赢家。

在某些情况下,这可能是一个巨大的表现胜利。但是还有额外的手工工作来保持表的同步。

票数 2
EN

Stack Overflow用户

发布于 2015-07-27 18:20:19

这里确实没有足够的信息来估计(更不用说量化)好处是什么,但是成本是非常清楚的--更复杂的代码、更复杂的模式、可能更大的总体空间使用以及添加和删除行时的性能开销。

性能改进可能来自在执行全表扫描时扫描较小数量的数据,或在需要时增加在内存中查找数据块的可能性,以及总体较小的内存占用,但如果没有关于通常执行的操作类型的具体信息,以及服务器是否处于内存压力之下,则无法提供可靠的建议。

要非常小心,使您的系统更复杂,作为一个不确定的性能收益的副作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31659127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档