分表的缺点(例如 SQL Server)

5

我从来没有对表进行分区,但是我读到的资料显示,它在查询和存档数据方面有许多优势。

它是否比创建索引更好?有没有缺点?分区所花费的时间是唯一的成本吗?

2个回答

8
将表进行分区有两个原因 - 如果表非常大或者您需要快速添加或删除数据片段。
对于非常大的审计表,您可以将表分成每月的分区。这样,当您搜索给定月份的行时,SQL Server只需查找与该月份相关联的分区。在执行select语句时,您可以像处理典型表格一样处理分区 - 不需要特殊语法。
如果在新的一个月开始时,您可能希望放弃最旧的一个月的数据并添加最新的一个月,那么只需执行简单操作即可删除一个分区并添加一个分区。 SQL Server不需要重新构建整个表上的索引 - 它仅以元操作的形式内部删除和添加分区,并且通常只需要几秒钟。
执行此操作的SQL并不难,您可以安排备份个别分区。但是,SQL Server中的分区仅适用于企业版,且分区表无法还原到其他版本的SQL Server。

我尝试在SQL Server Express 2017中对表进行分区,它可以工作。你从哪里得到的信息说这仅在企业版中受支持?根据微软文档,所有版本的SQL Server都可以使用分区功能:https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2017?view=sql-server-2017。 - Martin Riddar

5

背景:

如果大部分操作发生在内存中,数据库查询的延迟将会很低。数据库会自动尽力实现这一点,并提供调优选项以确保正确设置缓冲区/缓冲池和其他选项。

为什么要对表进行分区?

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

它与索引并不是优越还是劣势,而是一种不同的技术。

在采取分区路线之前

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

分区的优点

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

缺点

  • 作为应用程序需要更改以写入正确的分区的方式颇具侵入性。如果分区数量增长超出了容量,您将面临同样的问题。据我所知,需要进行完整的重新分区才能增加分区计数。这绝对是一项不可忽视的工作。

1
应用程序需要更改才能写入正确的分区,这是一种侵入式的方式。分区的目的在于它是透明的。无需在任何地方进行更改即可利用表分区。 - Nick.McDermaid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接