iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >(3)SQL Server表分区
  • 952
分享到

(3)SQL Server表分区

(3)SQLServer表分区 2020-05-01 11:05:24 952人浏览 无得
摘要

1.简介 当一个表数据量很大时候,很自然我们就会想到将表拆分成很多小表,在执行查询时候就到各个小表去查,最后汇总数据集返回给调用者加快查询速度。比如电商平台订单表,库存表,由于长年累月读写较多,积累数据都是异常庞大的,这时候,我们

(3)SQL Server表分区

1.简介

当一个表数据量很大时候,很自然我们就会想到将表拆分成很多小表,在执行查询时候就到各个小表去查,最后汇总数据集返回给调用者加快查询速度。比如电商平台订单表,库存表,由于长年累月读写较多,积累数据都是异常庞大的,这时候,我们可以想到表分区这个做法,降低运维和维护成本,提高读写性能。比如将前半年订单放一个历史分区表,不活跃库存放一个历史分区表。截止到SQL Server 2016,一张表或一个索引最多可以有15000个分区。

2.表分区

2.1分区范围

分区范围是指在要分区的表中,根据业务选择表中的关键字段做为分区边界条件,分区后,数据所在的具体位置至关重要,这样才能在需要时只访问相应的分区。注意分区是指数据的逻辑分离,不是数据在磁盘上的物理位置,数据的位置由文件组来决定,所以一般建议一个分区对应一个文件组。

2.2分区键

分区表中的字段可以作为分区键,比如库存表中供应商ID。对表和索引进行分区的第一步就是定义分区的关键数据。

2.3索引分区

除了对表的数据集进行分区之外,还可以对索引进行分区,使用相同的函数对表及其索引进行分区通常可以优化性能。

3.创建表分区

3.1创建文件组

在这里演示示例当中,我根据业务场景在TestDB数据库新增三个文件组,而三个文件组分别对应三个分区。而多个文件组好处是可以按照不同业务场景将数据放在对应文件组当中,优化性能同时好维护数据。文件组数量由硬件决定,最好是一个文件组对应一个分区,好维护。而通常文件组都处于不同磁盘上的,但是由于是演示,我只在一个磁盘中存放。

--创建四个文件组
ALTER DATABASE [TestDB] ADD FILEGROUP SupIDGroup1
ALTER DATABASE [TestDB] ADD FILEGROUP SupIDGroup2
ALTER DATABASE [TestDB] ADD FILEGROUP SupIDGroup3

3.2指定文件组存放路径

在创建文件组之后,指定文件组存放磁盘位置,文件大小。

--创建四个ndf文件,对应到各文件组中,FILENAME文件存储路径
ALTER DATABASE [TestDB] ADD FILE(
NAME="SupIDGroupFile1",
FILENAME="D:Microsoft sql ServerMSSQL11.MSSQLSERVERMSSQLDATASupIDGroupFile1.ndf",
SIZE=10MB,
FILEGROWTH=10MB)
TO FILEGROUP SupIDGroup1

ALTER DATABASE [TestDB] ADD FILE(
NAME="SupIDGroupFile2",
FILENAME="D:Microsoft SQL ServerMSSQL11.MSSQLSERVERMSSQLDATASupIDGroupFile2.ndf",
SIZE=10MB,
FILEGROWTH=10MB)
TO FILEGROUP SupIDGroup2

ALTER DATABASE [TestDB] ADD FILE(
NAME="SupIDGroupFile3",
FILENAME="D:Microsoft SQL ServerMSSQL11.MSSQLSERVERMSSQLDATASupIDGroupFile3.ndf",
SIZE=10MB,
FILEGROWTH=10MB)
TO FILEGROUP SupIDGroup3

注(附上删除文件组T-SQL):

ALTER DATABASE [TestDB] REMOVE FILE SupIDGroupFile3


可以通过以下T-SQL语句查看文件组存放相关信息:

SELECT file_id,type,type_desc,data_space_id,name,physical_name,state_desc,size,growth
FROM sys.database_files

3.3创建分区函数

如何创建表分区边界值,我们肯定要根据业务场景来决定。比如我测试库库存表有36万左右数据,而有些供应商的库存数据远远比其他供应商大,那么我可以考虑使用供应商ID字段作为边界值分区。例如:根据T-SQL统计,18080供应商库存数据最大,那么我可以根据18080供应商上下分为三个区。

第一个分区范围记录:供应商ID小于等于13570的39097条库存数据。

第二个分区范围记录:供应商ID大于13570和小于等于18079的45962条库存数据。

第三个分区范围记录:供应商ID大于18079小于等于18080的164937条库存数据。

第四个分区范围记录:供应商ID大于18080的111116条库存数据。

根据上述分区范围记录,我们可以将供应商ID作为边界值设置,执行以下T-SQL语句设置边界值:

--设置边界值
CREATE PARTITioN FUNCTION PF_SupplierID(int)
AS RANGE LEFT FOR VALUES (13570,18079,18080)

执行完毕后如图所示:

3.4创建分区方案

执行以下T-SQL语句创建分区方案:

--创建分区方案
CREATE PARTITION SCHEME PS_SupplierID
AS PARTITION PF_SupplierID TO ([PRIMARY], [SupIDGroup1],[SupIDGroup2],[SupIDGroup3])

执行完毕后如图所示:

3.5创建分区表

上面那些分区步骤都是为了接下来创建分区表这一步骤而准备的。废话不多说,现在我们来看看如何创建分区表。右键需要分区的表->储存->创建分区,具体步骤如下图所示:





3.6创建分区索引

--创建分区索引
CREATE NONCLUSTERED INDEX [NCI_SupplierID] ON dbo.Stock
(
    SupplierID ASC
)
INCLUDE ( [Model],[Brand],[Encapsulation]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
Go

或者

执行完毕后如图所示:


创建好索引之后,我们来看看分区情况:

--查看各分区有多少行数据
SELECT * FROM (
SELECT $PARTITION.PF_SupplierID([SupplierID]) AS Patition,COUNT(*) AS CountRows FROM dbo.Stock
GROUP BY $PARTITION.PF_SupplierID([SupplierID])
)TB ORDER BY Patition

最后我们来看看加了索引之后表数据查询情况:

4.表分区的优缺点

优点:
改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用。
维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可。
均衡I/O:可以把不同的分区映射到不同磁盘以平衡I/O,改善整个系统性能。
缺点:
分区表相关:已经存在的表没有方法可以直接转化为分区表。

您可能感兴趣的文档:

--结束END--

本文标题: (3)SQL Server表分区

本文链接: https://www.lsjlt.com/news/5381.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL Server表分区删除详情
    目录一、引言二、演示2.1、数据查询2.1.1、 查看分区元数据2.1.2、统计每个分区的数据量2.2、删除实操2.2.1、合并原表分区2.2.2、备份原表所有索引的创建脚本2.2....
    99+
    2024-04-02
  • SQL server 2005怎么实现表分区
    本篇内容介绍了“SQL server 2005怎么实现表分区”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • 3-3 SQL Server 2005数
    3-3 SQL Server 2005数据库优化 u      了解数据库引擎优化顾问基本内容 u      掌握数据库引擎优化顾问的使用 u      掌握通过命令行的方式进行索引的优化——DTA     一个数据库系统的性能依赖于组成...
    99+
    2023-01-31
    SQL Server
  • SQL Server数据库分区分表的示例分析
    这篇文章主要介绍SQL Server数据库分区分表的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、 需求说明将数据库Demo中的表按照日期字段进行水平分区分表。要求数据文件按一年一个文件存储,且...
    99+
    2023-06-14
  • SQL Server 数据库分区分表(水平分表)详细步骤
    目录1、 需求说明2、实现思路2.1分区原理2.2 水平分区优点2.3 实现思路3、实现步骤 3.1代码创建分区表3.1.1  创建...
    99+
    2024-04-02
  • SQL Server分页3种方案比拼
    此转载源自李洪根的blog.作者是微软的MVP!希望大家参考以下3种方案,按实际情况选择! 建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [Fir...
    99+
    2023-01-31
    分页 方案 SQL
  • 3-1 SQL Server 2005的
      第3章      事务处理,并发控制及数据库优化 l        SQL Server 2005的事务处理 l        SQL Server 2005的并发控制 l        SQL ...
    99+
    2023-01-31
    SQL Server
  • SQL Server 表变量和临时表的区别是什么
    SQL Server 表变量和临时表的区别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、表变量  表变量在SQL S...
    99+
    2024-04-02
  • SQL Server中怎么根据分区表名查找所在的文件
    这篇文章给大家介绍SQL Server中怎么根据分区表名查找所在的文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。SELECT ps.name AS&nb...
    99+
    2024-04-02
  • mysql和sql server区别
    mysql和sql server有什么区别?这是不少网友都关注的问题,接下来由php小编为大家带来mysql和sql server的区别介绍,感兴趣的网友一起随小编来瞧瞧吧! mysq...
    99+
    2024-05-08
    mysql 并发访问
  • sql如何删除分区表的分区数据
    要删除分区表的分区数据,可以使用以下SQL语句: ALTER TABLE table_name DROP PARTITION par...
    99+
    2024-04-09
    sql
  • sql和sql server有什么区别
    小编给大家分享一下sql和sql server有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!sql是什么?sql,全称...
    99+
    2024-04-02
  • 使用SQL Server分区表功能提高数据库的读写性能
    一般来说一个系统最先出现瓶颈的点很可能是数据库。比如我们的生产系统并发量很高在跑一段时间后,数据库中某些表的数据量会越来越大。海量的数据会严重影响数据库的读写性能。 这个时候我们会开始优化系统,一般会经过这么几个过程: ...
    99+
    2023-05-05
    SQL Server分区表
  • Mysql 和Sql Server的区别
    MySQL和SQL Server都是关系型数据库管理系统(RDBMS),但它们有以下不同之处: 开发商:MySQL由Oracle公司开发,而SQL Server由Microsoft公司开发。 操作系统支持:MySQL可以在多个操作系统上...
    99+
    2023-09-07
    sql
  • SQL SERVER中四个系统表分别是什么
    这篇文章主要介绍了SQL SERVER中四个系统表分别是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQL SERVER 中有四个系统...
    99+
    2024-04-02
  • SQL Server临时表的正确删除方式(sql server 删除临时表)
    目录SQL Server临时表的正确删除方式1、错误的删除操作:2、正确的删除方式:补充:SQL临时表的使用示例删除临时表SQL Server临时表的正确删除方式 临时表与一般的表不同,它是保存到tempDb表中。临时表...
    99+
    2023-02-16
    sql删除临时表 sql临时表使用
  • mysql和sql server区别大吗
    mysql和sql server的区别在于:1.许可证:mysql开源免费,sql server需要付费许可证;2.平台:mysql跨平台,sql server主要针对windows;3...
    99+
    2024-04-22
    mysql linux macos
  • PL/SQL中的分区表与分区索引怎么实现
    在 PL/SQL 中实现分区表和分区索引,可以通过以下步骤: 创建分区表:在创建表的时候,使用 PARTITION BY 子句指定...
    99+
    2024-05-08
    PL/SQL
  • SQL Server怎么使用T-SQL公用表表达式
    本文小编为大家详细介绍“SQL Server怎么使用T-SQL公用表表达式”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server怎么使用T-SQL公用表表达式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-30
  • server 2012怎么分区
    本篇内容介绍了“server 2012怎么分区”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!server 2012分区的方法首先进...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作