返回顶部
首页 > 资讯 > 数据库 >Mysql四种分区方式及组合分区落地怎么实现
  • 386
分享到

Mysql四种分区方式及组合分区落地怎么实现

2023-06-30 01:06:20 386人浏览 八月长安
摘要

这篇文章主要介绍“Mysql四种分区方式及组合分区落地怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mysql四种分区方式及组合分区落地怎么实现”文章能帮助大家解决问题。一、问题1.分区是什

这篇文章主要介绍“Mysql四种分区方式及组合分区落地怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mysql四种分区方式及组合分区落地怎么实现”文章能帮助大家解决问题。

一、问题

1.分区是什么

分区:就是把一张表数据分块存储

目的:提升索引的查询效率

2.mysql为什么要使用分区

先从数据分析

然后进行索引优化

然后引入分区

3.Mysql中分区原理

客户端---------> Id 和分区键进行比较------------->找到指定分区---------->和数据库查询一致

4.Mysql中分区局限

必须使用分区字段才行,不然分区查询就会失败。走所有分区。

目前Range是范围分区,但是有时候我们会发现。分区大小永远是静态的。

所以会存在一个分区表大小不均。如何让分区表大小均衡呢?

二、分区落地实现

1.Range分区

条件

  • Product-Partiton表

步骤

先创建Product-Partiton-Range

CREATE TABLE `product-Partiton-Range` (`Id` BIGINT(8) NOT NULL,`ProductName` CHAR(245) NOT NULL DEFAULT '1',`ProductId` CHAR(255) NOT NULL DEFAULT '1',`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',PRIMARY KEY (`Id`),INDEX `ProductId` (`ProductId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4PARTITION BY RANGE (Id) PARTITIONS 3 (PARTITION part0 VALUES LESS THAN (12980), PARTITION part1 VALUES LESS THAN (25960), PARTITION part2 VALUES LESS THAN MAXVALUE);

然后查询分区表

select * from product-Partiton-Range where Id = 25000

2.Hash分区

步骤

先创建Product-Partiton-Hash

CREATE TABLE `product-Partiton-Hash` (    `Id` BIGINT(8) NOT NULL,    `ProductName` CHAR(245) NOT NULL DEFAULT '1',    `ProductId` CHAR(255) NOT NULL DEFAULT '1',    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',    PRIMARY KEY (`Id`),    INDEX `ProductId` (`ProductId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4PARTITION BY HASH (Id) PARTITIONS 3;

Hash分区只能进行数字字段进行分区,无法进行字符字段进行分区。如果需要对字段值进行分区。

必须包含在主键字段内。

3.Key分区

步骤

先创建Product-Partiton-Key

CREATE TABLE `product-Partiton-Key` (`Id` BIGINT(8) NOT NULL,`ProductName` CHAR(245) NOT NULL DEFAULT '1',`ProductId` CHAR(255) NOT NULL DEFAULT '1',`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',PRIMARY KEY (`Id`),INDEX `ProductId` (`ProductId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4PARTITION BY KEY (ProductName) PARTITIONS 3;#建立复合主键CREATE TABLE `product-Partiton-Key` (`Id` BIGINT(8) NOT NULL,`ProductName` CHAR(245) NOT NULL DEFAULT '1',`ProductId` CHAR(255) NOT NULL DEFAULT '1',`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',PRIMARY KEY (`Id`),INDEX `ProductId` (`ProductId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4PARTITION BY KEY (ProductName) PARTITIONS 3;

以上分区都是一个特点:所有的分区必须连续和连续大小进行分区。

我们再来看一个场景:如何对商品订单分区。

4.Mysql中如何落地List分区

步骤

先创建Product-Partiton-List

CREATE TABLE `product-Partiton-List` (    `Id` BIGINT(8) NOT NULL,    `ProductName` CHAR(245) NOT NULL DEFAULT '1',    `ProductId` CHAR(255) NOT NULL DEFAULT '1',    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',    `ProductStatus` int NOT NULL DEFAULT 0,    PRIMARY KEY (`Id`),    INDEX `ProductId` (`ProductId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4PARTITION BY LIST(ProductId) (    PARTITION a VALUES IN (1,5,6),    PARTITION b VALUES IN (2,7,8));

商品主键和商品名称进行分区。

5.Mysql中如何落地组合分区

步骤

CREATE TABLE `product-Partiton-flex` (    `Id` BIGINT(8) NOT NULL,    `ProductName` CHAR(245) NOT NULL DEFAULT '1',    `ProductId` CHAR(255) NOT NULL DEFAULT '1',    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',    PRIMARY KEY (`Id`,`ProductName`),    INDEX `ProductId` (`ProductId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4PARTITION BY RANGE (Id) PARTITIONS 3SUBPARTITION BY KEY(ProductName)  SUBPARTITIONS 2 (    PARTITION p0 VALUES LESS THAN (12980),    PARTITION p1 VALUES LESS THAN (25960),    PARTITION p2 VALUES LESS THAN MAXVALUE);

三、Mysql如何管理分区

1.删除分区

ALERT TABLE users DROP PARTITION p0; #删除分区 p0

2.重建分区

2.1RANGE 分区重建
ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000));  #将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。
2.2 LIST 分区重建
ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));#将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。
2.3 HASH/KEY 分区重建
ALTER TABLE users REORGANIZE PARTITION COALESCE PARTITION 2; #用 REORGANIZE 方式重建分区的数量变成2,在这里数量只能减少不能增加。想要增加可以用 ADD PARTITION 方法。

3. 新增分区

3.1 新增 RANGE 分区
#新增一个RANGE分区ALTER TABLE cateGory ADD PARTITION (PARTITION p4 VALUES IN (16,17,18,19)            DATA DIRECTORY = '/data8/data'            INDEX DIRECTORY = '/data9/idx');
3.2 新增 HASH/KEY 分区
ALTER TABLE users ADD PARTITION PARTITIONS 8;   #将分区总数扩展到8个。
3.3 给已有的表加上分区
alter table results partition by RANGE (month(ttime)) (PARTITION p0 VALUES LESS THAN (1),PARTITION p1 VALUES LESS THAN (2) , PARTITION p2 VALUES LESS THAN (3) ,PARTITION p3 VALUES LESS THAN (4) , PARTITION p4 VALUES LESS THAN (5) ,PARTITION p5 VALUES LESS THAN (6) , PARTITION p6 VALUES LESS THAN (7) ,PARTITION p7 VALUES LESS THAN (8) , PARTITION p8 VALUES LESS THAN (9) ,PARTITION p9 VALUES LESS THAN (10) , PARTITION p10 VALUES LESS THAN (11),PARTITION p11 VALUES LESS THAN (12),PARTITION P12 VALUES LESS THAN (13) );
4.默认分区限制分区字段必须是主键(PRIMARY KEY)的一部分,去除此限制

[方法1] 使用ID:

mysql> ALTER TABLE np_pk    ->     PARTITION BY HASH( TO_DAYS(added) )    ->     PARTITIONS 4;#ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning functionmysql> ALTER TABLE np_pk    ->     PARTITION BY HASH(id)    ->     PARTITIONS 4;Query OK, 0 rows affected (0.11 sec)Records: 0 Duplicates: 0 Warnings: 0

[方法2] 将原有PK去掉生成新PK

mysql> alter table results drop PRIMARY KEY;Query OK, 5374850 rows affected (7 min 4.05 sec)Records: 5374850 Duplicates: 0 Warnings: 0mysql> alter table results add PRIMARY KEY(id, ttime);Query OK, 5374850 rows affected (7 min 4.05 sec)Records: 5374850 Duplicates: 0 Warnings: 0

关于“Mysql四种分区方式及组合分区落地怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网数据库频道,小编每天都会为大家更新不同的知识点。

您可能感兴趣的文档:

--结束END--

本文标题: Mysql四种分区方式及组合分区落地怎么实现

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

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

猜你喜欢
  • Mysql四种分区方式及组合分区落地怎么实现
    这篇文章主要介绍“Mysql四种分区方式及组合分区落地怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mysql四种分区方式及组合分区落地怎么实现”文章能帮助大家解决问题。一、问题1.分区是什...
    99+
    2023-06-30
  • Mysql四种分区方式以及组合分区落地实现详解
    目录一、问题1.分区是什么2.Mysql为什么要使用分区3.Mysql中分区原理4.Mysql中分区局限二、分区落地实现1.Range分区2.Hash分区3.Key分区4.Mysql...
    99+
    2024-04-02
  • mysql表的四种分区方式是什么
    这篇文章主要介绍“mysql表的四种分区方式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql表的四种分区方式是什么”文章能帮助大家解决问题。1、什么是表分区?mysql数据库中的数据是...
    99+
    2023-06-30
  • mysql表的四种分区方式总结
    目录1、什么是表分区?2、表分区与分表的区别3、表分区有什么好处?4、分区表的限制因素5、如何判断当前MySQL是否支持分区? 6、MySQL支持的分区类型有哪些?6.1、...
    99+
    2024-04-02
  • Mysql区间分组查询的实现方式
    目录Mysql区间分组查询场景第一想法一番百度之后另一种解决办法按区间分组查询、获取各区间的总数数据表如下需求Mysql区间分组查询 场景 一张用户表(user),有用户id(id)...
    99+
    2022-11-13
    Mysql区间分组 Mysql查询 Mysql区间分组查询
  • mysql 表分区的方式和实现
    1. mysql 表的分区方式 MySQL 提供了多种分区方式,以下是常见的几种分区方式: 范围分区(RANGE):按照某个连续的范围将数据分区,例如按照订单日期进行分区。在创建表时,可以使用 PARTITION BY RANGE 子句来设...
    99+
    2023-08-17
    mysql mysql 分区的方式 mysql 分区的实现样例
  • 怎么实现MyISAM分区表迁移及合并
    这期内容当中小编将会给大家带来有关怎么实现MyISAM分区表迁移及合并,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 dyn_change_...
    99+
    2024-04-02
  • MySQL中怎么实现分区
    本篇文章为大家展示了MySQL中怎么实现分区,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一.InnoDB逻辑存储结构首先要先介绍一下InnoDB逻辑存...
    99+
    2024-04-02
  • mysql中怎么实现range分区
    本篇文章为大家展示了mysql中怎么实现range分区,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一,如何启动mysqld?    ...
    99+
    2024-04-02
  • MySQL中怎么实现分区表
    MySQL中怎么实现分区表,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。   MySQL分区的建立 MySQL可以建立四种分区...
    99+
    2024-04-02
  • 怎么在MySQL中实现分表与分区
    这篇文章将为大家详细讲解有关怎么在MySQL中实现分表与分区,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。分表单表数据量太大时,会严重影响sql执行的性能。一般单表到达几百万的时候,性能就会...
    99+
    2023-06-14
  • MySQL中怎么实现水平分区
    MySQL中怎么实现水平分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。表结构如下:查询。 SELECT ...
    99+
    2024-04-02
  • MySQL中怎么实现表分区功能
    今天就跟大家聊聊有关MySQL中怎么实现表分区功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 MySQL表分区功能基础  创建分区表  CREA...
    99+
    2024-04-02
  • MySQL 5.5中怎么实现分区功能
    今天就跟大家聊聊有关MySQL 5.5中怎么实现分区功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  非整数列分区  任何使用过分区的人应该都遇...
    99+
    2024-04-02
  • vue中集成省市区街四级地址组件怎么实现
    本篇内容主要讲解“vue中集成省市区街四级地址组件怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue中集成省市区街四级地址组件怎么实现”吧!效果图首先我们可以先来看看效果图:下拉选择器...
    99+
    2023-07-04
  • MySQL 5.5中怎么利用UNIX_TIMESTAMP实现分区
    MySQL 5.5中怎么利用UNIX_TIMESTAMP实现分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  ...
    99+
    2024-04-02
  • Mysql分组排序取每组第一条的2种实现方式
    目录前言前期准备第一种原因分析:解决:第二种GROUP_CONCAT函数解释:总结前言 记录一下最近的一个需求,查不同产品排名第一的图片作为主图 其实一开始想用的是myBATis的级联查询,结果说需要一次性全部查出来 那...
    99+
    2023-02-15
    mysql 分组排序取每组第一条 mysql分组取时间最近一条 MySQL分组查询每组取第一条
  • mysql实现按组区分后获取每组前几名的sql怎么写
    本篇内容介绍了“mysql实现按组区分后获取每组前几名的sql怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2023-03-23
    mysql sql
  • mysql中怎么实现查询区分大小写
    这期内容当中小编将会给大家带来有关mysql中怎么实现查询区分大小写,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。查询区分大小写的问题 mysql查询默认是不区...
    99+
    2024-04-02
  • 【工作记录】mysql中实现分组统计的三种方式
    前言 实际工作中对范围分组统计的需求还是相对普遍的,本文记录下在mysql中通过函数和sql完成分组统计的实现过程。 数据及期望 比如我们获取到了豆瓣电影top250,现在想知道各个分数段的电影总数. 表数据如下: 期望结果: 实现方案...
    99+
    2023-08-30
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作