首页 > 数据库 >数据库分区

数据库分区

时间:2023-10-10 22:23:54浏览次数:32  
标签:less 数据库 partition than values date 分区

1.数据库分区

分区优点

1、与单个磁盘或文件系统分区相比,可以存储更多的数据。
2、通过删除与增加那些数据有关的分区,很容易地删除或增加那些数据。
3、一些查询可以得到极大的优化。
4、通过跨多个磁盘甚至服务器来分散数据查询,来获得更大询吞吐量。
5、MySQL5.5之后支持所有函数的分区优化。限定只查询有效的分区。

Range分区

基于属于一个给定连续区间的列值,把多行分配给分区。

ALTER TABLE titles
//分区语句   range
partition by range (year(from_date))// year(from_date)  分区的依据
(
    partition po1 values less than (1985), 小于不包含[-无穷,1985)
    partition po2 values less than (1986),
    partition po3 values less than (1987),
    partition p04 values less than (1988),
    partition p15 values less than (1999),
    partition p16 values less than (MAXVALUE)
);

list分区

类以于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

create table t2 (id int,cid int,name varchar(20),pos_date datetime)
partition by list (cid)	
(
    partition po1 values in (1,2,3),
    partition p02 values in (4,5,6),
    partition po3 values in (7,8,9)
);

Hash分区

基于用户定义的表达式的返回值来进行选择的分区,基于插入的行的列信息通过表达式计算返回非负整数来确定分区

使用HASH分区的优点在于数据分布较为均匀

create table t3 (id int,cid int,name varchar(20),pos_date datetime)
partition by hash(cid)
partitions 4;

Linear Hash分区

1.缺点

数据分布不均衡(有的分区数据多,有的分区数据少)

2.优点

  • 增加、删除、合并和拆分分区快捷
  • 有利于处理大量数据表
create table t3 (id int,cid int,name varchar(20),pos_date datetime)
partition by linear hash(cid)
partitions 4;

key分区

create table t3 (id int,cid int,name varchar(20),pos_date datetime)
partition by key(cid)
partitions 4;

添加功能(mysql 5.5版本以上)

多列分区columns (string date)

create table t4(a int,b int,c int)
partition by range columns(a,b)   //插入时按从左往右进行对比
(
     partition po1 values less than (10,20),
     partition p02 values less than (10,30),
     partition po3 values less than (10,maxvalue)
 );

子分区

子分区是分区表中每个分区的再次分割。
子分区可以用于特别大的表,在多个磁盘间分配数据和索引。

CREATE TABLE t5 (id INT,udate DATE)
PARTITION BY RANGE(YEAR(udate))
SUBPARTITION BY HASH(TO_DAYS(udate))
SUBPARTITIONS 2
(
    PARTITION PO VALUES LESS THAN(1990)
    PARTITION p1 VALUES LESS THAN (2000),
    PARTITION p2 VALUES LESS THAN MAXVALUE
);

子分区将数据和索引分配到不同文件夹下,减轻单个I/O压力

CREATE TABLE t5 (id INT,udate DATE)
PARTITION BY RANGE(YEAR(udate))
SUBPARTITION BY HASH(TO_DAYS(udate))
(
     partition p0l values less than (1999)
    (
        subpartition s0
        data directory='/var/a/data'
        inde× directory="/var/a/idx',
        subpartition s1
        data directory='/var/b/data'
        index directory='/var/b/idx'
    ),
	partition p02 values less than (2000)
    (
        subpartition s2
        data directory='/var/c/data'
        index directory='/var/c/idx',
        subpartition s3
        data directory='/var/d/data'
        index directory='/var/d/idx'
    )
);

分区管理和维护

1.alter进行简单修改分区

ALTER语句简单修改了分区。效果和先删除原表再按新的分区方式重新建表效果相同。

alter table t3 partition by key() partitions 2

2.删除分区

alter table t3 drop partition  p02  //删除本分区结构和数据
alter table t3 truncate partition p01 //不删除本分区结构,只删除本分区数据

3.range添加分区

partition by range (year(from_date))// year(from_date)  分区的依据
(
    partition po1 values less than (1985), 小于不包含[-无穷,1985)
    partition po2 values less than (1986)
 )
alter table t1 add partition (partition p02 values less than("date"))
注意
	"date"填写的数据必须高于上次创建分区的最大值

4.list添加分区

partition by list (cid)	
(
    partition po1 values in (1,2,3),
    partition p02 values in (4,5,6),
    partition po3 values in (7,8,9)
);
alter table t1 add partition (partition p02 values in ("date"))
注意
"date"填写的数据不能包含原有的数据

5.分区重组

ALTER TABLE t1 REORGANIZE PARTITION pO1 INTO(
PARTITION sO VALUES LESS THAN(5)
PARTITION s1 VALUES LESS THAN(10));
注意
	1.range分区重组 只能相邻的分区 不能跳过分区重组
	2.list分区重组,重组的必须覆盖原有区间

6.hash和key分区数量

alter table t3 coalesce partition 2  //在原有的分区数量上减少2个
alter table t3 add partition partitions 2 //在原有的分区数量上增加2个

分片

  1. 垂直分片

业务维度将表拆分到不同的数据库中,专库专用,分担数据库压力。

  1. 水平分片

解决单表数据过大的问题

数据库索引

  • 按数据结构分类:B+tree索引 Hash索引 Full-text索引,
  • 按物理存储分类: 聚集索引、非聚集索引。
  • 按字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索 (INDEX)、全文索引(FULLTEXT)。
  • 按字段个数分类:单列索引、联合索引(也叫复合索引、组合索引)

标签:less,数据库,partition,than,values,date,分区
From: https://www.cnblogs.com/darkerKing/p/17752913.html

相关文章

  • 数据库的字段属性
    Unsigned:无符号的整数声明了该列不能声明为负数zerofill:0填充的不足的位数使用0来填充 int(3)  ,5=005自增:通常理解为自增,自动在上一条的基础上+1(默认)通常用来设计唯一的主键~index,必须是整数类型可以自定义设计主键自增的起始值......
  • 多线程分批处理数据(控制服务器cpu,控制数据库cpu)
    packageip;importcom.google.common.collect.Lists;importlombok.extern.slf4j.Slf4j;importjava.util.List;importjava.util.concurrent.CountDownLatch;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;/***功能描述:总思路,根据业务......
  • [GWCTF 2019]我有一个数据库
    原理phpmyadmin4.8.1漏洞php对目录不存在不敏感解题过程进入靶场,看到乱码的页面--,原代码也没啥提示,只能扫目录看看了最终扫到了phpmyadmin,进入可以看到版本信息上网搜漏洞进行复现即可....这个漏洞之前做过,就是切割问号然后目录穿越参考文章:https://blog.csdn.net/m0_55......
  • 9月《中国数据库行业分析报告》已发布,47页干货带你详览 MySQL 崛起之路!
    为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生态发展,目前已更至第十七期,并发布了共计1......
  • 数据库索引
    聚集索引主键->数据页聚集索引是一种物理存储结构,决定了数据在磁盘上的物理存储顺序。主键是一种约束,用于唯一标识表中的数据行。它通常会自动创建一个聚集索引来支持主键的查找和排序。主键约束约束了唯一性和非空性。要注意的是,聚集索引和主键不是互斥的概念。一个表......
  • .NET 数据库大数据操作方案(插入、更新、删除、查询 、插入或更新)
    1、功能介绍 海量数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API操作数据库达到极限性能,当然你如果不用sqlsugar了解一下原理也可以使用其他ORM实现 BulkCopyBulkCopy是一种用于高效批量......
  • mysql 创建表分区 list分区
    CREATETABLE`goods`(`id`varchar(36)NOTNULL,`goods_name`varchar(256)NOTNULLCOMMENT'产品名称',`release_version`varchar(8)NOTNULL,PRIMARYKEY(`release_version`,`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4ROW_FORMAT=DYNAMIC;al......
  • LntonGBS针对数据库删除级联数据后的无效数据进行的优化
    LntonGBS国标视频云服务可支持通过国标GB28181协议将设备接入,实现视频的实时监控直播、录像、语音对讲、云存储、告警、级联等功能,同时也支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。同时LntonGBS平台也支持海康Ehome协议及SDK......
  • luffy前端配置、跨域问题、后端数据库迁移、后台主页功能、轮播图表、后台管理
    luffy前端配置再在vue中使用时,就不需要导入,直接使用this.$,,,就可以了1、跟后端交互:axioscnpminstall-Saxios以后想发送ajax请求,必须导入,使用可以把axios放到vue实例中,以后任意组件中 this.$axios.get()main.js中加入importaxiosfrom'axios' Vue.prot......
  • 10.9(数据库,半成品)
    今天下午连接数据库,半成品jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>添加信息</title><script&......