暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL 分区概述

原创 仓管员 2022-10-10
2711

介绍

在 SQL Server 中有几种 SQL 分区。一般来说,我们可以说分区是一种将表(有时是视图)划分为更小的块以提高性能的方法。在本文中,我们将解释分区对于表分区和 SSAS 的含义。我们还将提供一些指导来自动化分区过程。

SQL分区是什么意思?

让我们从表分区开始。如果我们有一个包含 TB 或 GB 信息的大表,则搜索单行的选择可能需要很长时间才能执行。为了解决这个问题,一个经典的分区是把表分成更小的块,例如按月划分。您可以按月、日、年进行分区。这取决于您的需求。

它就像一本厚厚的书。在单个页面中搜索某些内容将花费太多时间。即使有索引。但是,如果我们将书分成更小的书,搜索页面会更快更容易。备份和恢复数据会更快。

让我们从表分区场景开始,然后我们将讨论其他类型的分区。

表中的 SQL 分区是什么意思?

表分区是指将数据拆分到多个表中,以便在表处理大量数据时获得更好的性能。

表中有 2 种主要类型的分区。水平隔断和垂直隔断。

例如,在垂直分区中,您可以将数据拆分为 2 个表:

1.png
在上图中,我们将 Employee 表拆分为 2 个表。 Employee 表包含名字和姓氏,另一个表是 EmployeePicture。图像占用大量资源,因此单独处理数据是个好主意。将图像存储在单独的文件组和硬盘中是一种很好的做法。

另一方面,我们有水平分区

企业微信截图_20221010131551.png
在水平分区中,我们将一个大表划分为多个小表。上图显示了每月在表格中的报告分区。

有关表分区的更多详细信息以及如何逐步进行,请参阅我们的相关文章:
https://www.sqlshack.com/database-table-partitioning-sql-server/

SQL Server 中的数据库表分区对自动化意味着什么?

我们之前对此进行了解释,并提供了创建水平分区的链接。我们可以使用脚本自动执行表分区过程,并使用 T-SQL 查询监控丢失的分区。要监控分区,您可以使用如下系统表:

  • Sys.indexes
  • Sys.objects
  • Sys.system_internals_allocation_units
  • Sys.partition_schemes
  • Sys.partition_functions
  • Sys.partition_range_values

以下链接提供了自动维护分区的教程。
https://www.sqlshack.com/how-to-automate-table-partitioning-in-sql-server/

SSAS Azure 表格中的 SQL 分区是什么意思?
之前,我们讨论了 SQL Server 数据库引擎中使用的表分区。我们使用著名的传统 OLTP 数据库(在线事务处理)。事务数据库是在事务中插入、更新、删除数据的传统数据库。

SQL Server 后来将 OLAP 数据库作为一种新概念的数据库来处理包含大量数据的报表。当需要多个连接并且在数据库中使用几个 GB 时,传统的 OLTP 数据库生成报告的速度非常慢。这就是为什么微软首先从加拿大的 Panorama Software 购买 OLAP 技术,然后微软改进了这项技术,从而创建了 OLAP 数据库(在线分析过程)。

Microsoft 创建了 SSAS(SQL Server 分析服务),这是用于创建 OLAP 数据库的技术。微软从多维数据库开始。这项技术非常强大,但对于 OLTP DBA 或开发人员来说有点难以理解,因为它处理不同的架构、结构和组件。

为了简化创建报告的过程,Microsoft 引入了一个名为 Tabular Models 的新功能。这是一种更易于理解和创建报告和查询的技术。要从头开始创建新的多维数据库,请参阅以下链接:
https://www.sqlshack.com/build-cube-scratch-using-sql-server-analysis-services-ssas/

如果要创建表格数据库,请参考以下链接:
https://www.sqlshack.com/implementing-an-ssas-tabular-model-for-data-analytics/

这些技术开始成为本地技术。然而,微软正在将所有的努力都转移到云端。

现在,这些技术在 Azure 中,然后,表格和多维数据库的 SQL 分区在 Azure 中。

当您使用 SSDT、创建列、DAX(数据分析表达式)查询、MDX(多维表达式)查询、XMLA(用于分析的 XML)和 TMLS(表格模型脚本语言)时,如果模型是本地的,则它是透明的或在 Azure 中。

在本文中,我们将解释 Azure 表格模型中分区的含义。但是,本地表格模型的概念是相同的。

在表格模型中,分区是什么意思?

我们可以说使用查询将表分成更小的部分是相同的概念。表格模型中的分区是表的一部分,使用查询将其划分为更小的部分。

在这个例子中,我们将展示如何做到这一点。我假设您已经安装了表格实例并且您正在使用 AdventureWorks 表格项目(如果没有,请查看实施 SSAS 表格模型文章)。

在 Adventureworks 表格项目中,选择 Internet Sales 表。
2.png
在菜单中,前往Extensions>Table>Partitions
3.png
您将看到 Internet 销售的不同分区。此示例中的分区是每年。

Internet sales 2010, 2011,…2014. 2010, 2011,…2014。

分区之间的主要区别在于 where 子句。每个分区的日期范围不同。例如,对于 Internet Sales 2011 分区,where 子句如下:

WHERE (([OrderDate] >= N’2011-01-01 00:00:00′) AND ([OrderDate] < N’2012-01-01 00:00:00′))

另一方面,2012 年互联网销售情况如下:

WHERE (([OrderDate] >= N’2012-01-01 00:00:00′) AND ([OrderDate] < N’2013-01-01 00:00:00′))

4.png
如您所见,区别非常简单。让我们创建一个新分区。

按新按钮并在 Partition Name 文本框中输入 Internet Sales 2015 并在查询中将 WHERE 子句修改为以下内容并按 OK

WHERE (([OrderDate] >= N’2015-01-01 00:00:00′) AND ([OrderDate] < N’2016-01-01 00:00:00′))

5.png
SQL 分区不仅会改进适用于特定分区的查询,还会减少处理信息的时间。如果您有一个仅属于 2012 分区的查询,则该查询将比没有分区的模型更快,因为当您有分区时,仅使用属于该查询范围的查询进行搜索。

分区在 Azure 表格模型的自动化方面意味着什么?

如果您想在 Azure Analysis Services 表格模型中自动进行分区,我们强烈建议您阅读此链接:

https://www.sqlshack.com/dynamic-partitioning-in-azure-analysis-services-tabular/

结论

在本文中,我们了解了 SQL 分区在两种不同场景中的含义。在表分区中,我们解释了什么是水平和垂直分区。我们需要创建文件组、添加文件并创建分区和分区方案。

另一方面,我们在 SSAS 中有分区,这是一种特殊的报告技术。我们学习了如何使用 SSAS 表格项目在表格模型中创建分区。

我们最后介绍了与 Azure SSAS 中的动态分区相关的文章。

原文标题:SQL Partition overview
原文作者:Daniel Calbimonte
原文链接:https://www.sqlshack.com/sql-partition-overview/

最后修改时间:2022-10-10 14:31:20
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论