表分区的缺点(例如 SQL Server)

hel*_*986 4 database sql-server

我从来没有对表进行过分区,但是从我所读到的内容来看,它在查询和归档数据方面有很多优势。

它是否优于创建索引?有什么缺点吗?花在分区上的时间是唯一的成本吗?

ben*_*its 7

对表进行分区有两个原因 - 如果它非常大,或者如果您需要快速添加或删除数据切片。

在不同的大型审计表上,您可能会发现将表划分为每月分区很有用。这样,当您搜索给定月份的行时,SQL Server 只需查看与该月份关联的分区。执行选择时,您可以将分区视为典型表 - 不需要特殊语法。

如果在新的月份开始时,您可能想要删除最旧的月份并添加最新的月份,那么删除分区和添加分区是一个简单的操作。SQL Server 不必重建整个表上的索引——它只是在内部删除和添加分区作为元操作,通常需要几秒钟。

这样做的 SQL 并不难,您可以安排备份单个分区。但是 SQL Server 中的分区仅适用于企业版,并且无法将分区表还原到其他版本的 SQL Server。


小智 5

背景:

如果大部分操作发生在内存中,则数据库查询的延迟将会很低。数据库竭尽全力自动执行此操作。他们还提供调整选项,以确保您的缓冲区高速缓存/缓冲池和其他选项可以正确设置。

为什么要对表进行分区?

当我们不断向表中添加行时,表上的主键索引和任何其他索引的大小也会增加。一旦它们增长到整个索引不适合配置的缓冲区大小(存储经常访问的页面的位置),数据库引擎将不得不从磁盘获取索引页面,从而减慢查询速度。

它并不优于或劣于索引,而是一种不同的技术。

在走分区路线之前

  • 检查查询的解释计划(如果有特定的访问模式)并对其进行调整以确保使用正确的索引并限制磁盘操作。
  • 检查相关表和索引的大小以及它与配置的数据库内存(缓冲池)的关系。
  • 检查表是否可以进行碎片整理。所有数据库都提供命令来执行此操作(MySQL 称之为 OPTIMIZE,PostgreSQL 称之为 VACUUM)
  • 检查是否可以向服务器添加内存,RAM 很便宜。

分区的优点

  • 更小的表、更小的索引、更低的查询延迟。

缺点

  • 由于应用程序需要更改才能写入正确的分区,因此具有侵入性。如果分区数量超出了分区数量,则分区也会出现同样的问题。据我所知,需要完全重新分区来增加分区数量。当然是一项不平凡的活动。