假设我们有一个巨大的表,我们在上面运行非常复杂的查询。
假设这是一个 crm,我们有一个名为 People [id (GUID), listId (Guid), name, email, city, ......] 的表
将其表示为每个用户多个表会更好吗:
People_<USER_ID>
如果我们有 100 个用户,我们就有 100 个这样的表
或者
像上面这样的一个表,带有我们分区的 user_id 列?
最佳答案
每种方法都有优点和缺点。
例如,如果您使用单独的表,您可以单独对每个表进行重建索引或统计等维护,如果添加新用户,则创建新表很简单,而不用修改分区函数。
使用分区表,查询会得到极大简化,因为您不再依赖对每个单独的表使用 UNION
的查询。
中途地面是使用分区 View ;即构建一个 View ,该 View 具有联合在一起的各个表的定义。这提供了分区表的一些优点,但是如果添加新表,则 View 定义将需要维护,并且对于 100 个表来说,将非常笨重。
分区表通常最适合在数据仓库类型的环境中使用,您可以在其中拥有一个加载表,并将其添加为每次加载数据的新分区。在此环境中,您通常只在定义的时间将数据写入一个分区,并在其余时间从所有分区读取数据。
如果您的数据量非常大,那么分区可以在执行维护任务所需的时间方面提供一些好处(如果仅在一个或几个分区上需要这些任务)。然而,最好找到一个能适应这种情况的配分函数。例如,如果您的行写入一次并且未更新,则添加创建的日期时间并对其进行分区,或者使用递增主键并对其进行分区,这意味着您只需要重新索引事件分区。
关于sql-server - 表分区与多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30617262/