知方可补不足~SQL为大数据引入分区表

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:

一些概念

分区表在oracle和sqlserver中都上存在的,当数据表的数据量过大时,上千万,上亿的数据,在进行数据查询时需要显得比较慢,性能很差,这时是时候引入分区表了,分区表顾名思义,就是把物理表用一些文件NDF进行分块存储,以缓减IO的压力,因为当你的SQL文件过大的,这其实对系统的IO影响是最大的,这种分区表我感觉类似于数据的分片(mongodb),它将有效的利用服务器的CPU多核资源,并行去处理你的请求,所以在大数据情况下,分区表是很好的一种选择!

我们通常也把电脑的磁盘分成若干的区,其中一种考虑也是为了性能,安全等

sql的分区表于若干的文件组组成,它们可以被理解成依照某个条件(分区函数)来进行划分的文件块,当你进行curd操作时,SQL会把它同时响应到对应的块上去,文件组里至少包含一个文件,当然可以是多个,它们也可以在不同的磁盘上。

说干就干

下面来一步一步的实现一下分区表的建立逻辑

--建立两个文件组
ALTER DATABASE Test ADD FILEGROUP BEFORE2000
ALTER DATABASE Test ADD FILEGROUP AFTER2000
ALTER DATABASE Test ADD FILEGROUP AFTER2010

--创建文件
ALTER DATABASE Test ADD FILE
(Name=N'Before2000',filename='c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Before2000.ndf',size=5mb,maxsize=100Mb,filegrowth=5mb) 
TO FILEGROUP Before2000
ALTER DATABASE Test ADD FILE
(Name=N'After2000',filename='c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\After2000.ndf',size=5mb,maxsize=100Mb,filegrowth=5mb) 
TO FILEGROUP After2000
ALTER DATABASE Test ADD FILE
(Name=N'After2010',filename='c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\After2010.ndf',size=5mb,maxsize=100Mb,filegrowth=5mb) 
TO FILEGROUP After2010

上面代码在磁盘上建立了两个文件组,用来存储2000年以前,2000-2010年,以2010年以后的数据,而ndf是分区表文件的类型,一个分区表文件组可以由多个ndf文件构成

--编写分区函数
CREATE PARTITION FUNCTION RangeTime (DATETIME) AS RANGE LEFT FOR VALUES ('2000-01-01','2010-01-01')
--编写分区方案,  分区方案也就是将分区函数与文件组进行一个关联
CREATE PARTITION SCHEME RangeSchema_CreateTime
AS PARTITION RangeTime
TO (BEFORE2000,AFTER2000,AFTER2010)

上面分区函数说明以哪里依据进行分区,而分区方案是将它与分区文件组进行接合,或者和数据表进行打通,以后我们用的时候,直接用分区函数(表名)即可。

--创建分区表,先建表,再设主键,否则会出错
CREATE TABLE Order
    (
      ID VARCHAR(50) ,
      UserId VARCHAR(50) ,
      CreateTime DATETIME
    )
ON  RangeSchema_CreateTime(CreateTime)

上面代码建立一张表,并进行分区的配置,注意,在建立表后,再建立主键,我们填充一些数据就可以测试了,下面介绍几个常用的命令 

返回2001-2-2日这条数据会被分配到哪个分区了

--测试某个对象放在哪个分区里
SELECT  $PARTITION.RangeTime('2001-2-2')

查看指定分区内的数据

--查看某个分区表里存放的数据
SELECT  *
FROM    shop
WHERE   $PARTITION.RangeTime(CreateTime) = 1

查看某个分区里,记录的个数

--查看某个分区表的个数
SELECT  $PARTITION.RangeTime(CreateTime) AS 分区编号 ,
        COUNT(id) AS 记录数
FROM    shop
GROUP BY $PARTITION.RangeTime(CreateTime)  

当数据量达到一定指数时,我们必须要进行调整,而选择哪种方法是靠技术决策人的,我们每个开发人员都应该把自己当成是技术的决策人,对自己的代码和自己的人生负责!

感谢您的阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:知方可补不足~SQL为大数据引入分区表,如需转载请自行联系原博主。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
26天前
|
SQL 消息中间件 分布式计算
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
57 0
|
26天前
|
SQL 大数据
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
54 0
|
26天前
|
SQL 大数据 API
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
40 0
|
26天前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
34 0
|
26天前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
66 0
|
26天前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
27 0
|
26天前
|
SQL 分布式计算 大数据
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
39 0
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
98 13