返回顶部
首页 > 资讯 > 数据库 >MySql之分区分表
  • 105
分享到

MySql之分区分表

2024-04-02 19:04:59 105人浏览 安东尼
摘要

MySql之分区分表分表的概念分表:将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些表可以分布在同一块磁盘上,也可

MySql分区分表

分表的概念

分表:将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的表名,然后去操作它。

常用的算法:hash或求余(取模)等方式

分表的好处:减小数据库的负担,缩短查询时间

分表的类型:①垂直切分:是指数据表列的拆分,把一张列比较多的表拆分为多张表

            ②水平拆分是指数据表行的拆分,把一张的表的数据拆成多张表来存放

 

分表的方式:Mysql集群

            ②预先估计会出现大数据量并且访问频繁的表,将其分为若干个表

            ③利用merge存储引擎来实现分表

分表的案例:

1.创建库、表、数据

MySql之分区分表

使用:select  * from member;  查询表

2.将member分为两个表tb_member1,tb_member2。

tb_member1

MySql之分区分表

tb_member2

MySql之分区分表

创建主表

MySql之分区分表

使用降序查看b_member表的结构

MySql之分区分表

3.将数据分到两个表中

mysql> insert into tb_member1(id,name,sex) select id,name,sex from member where id%2=0;

MySql之分区分表

mysql> insert into tb_member2(id,name,sex) select id,name,sex from member where id%2=1;

MySql之分区分表

查看主表:mysql> select * from tb_member;  此时 总表只是一个外壳,存取数

据发生在一个一个的子表里面。

mysql> select * from tb_member where id=3; 查询基于id的条件语句更加快捷

4.查看文件表:每个子表都有自已独立的相关表文件,而主表只是一个壳,并没有完整的相关表文件

MySql之分区分表

分区的概念

分区:分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,分区后,表还是一张表,但数据散列到多个位置。app读写的时候操作的还是表名字,db自动去组织分区的数据。

分区的主要形式:①水平分区(Horizontal Partitioning):这种形式分区是对表的行进行分区,所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。

               ②垂直分区(Vertical Partitioning)这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。

分区技术支持:①在5.6之前,使用这个参数查看当将配置是否支持分区

                mysql> SHOW VARIABLES LIKE '%partition%'; 

              ②在5.6及以采用后,则采用如下方式进行查

                mysql> show plugins;

MySql之分区分表

分区案例

1.创建库、表、范围分区表

MySql之分区分表

插入15条数据

MySql之分区分表

查看存放数据库表文件

MySql之分区分表

计算基于id值的有多少行

MySql之分区分表

从infORMation_schema系统库中的partitions表中查看分区信息

MySql之分区分表

从某个分区中查询数据

MySql之分区分表

当删除了一个分区,也同时删除了该分区中所有的数据。

MySql之分区分表

新增分区

MySql之分区分表

分区合并

MySql之分区分表

再次查看存放数据库表文件

MySql之分区分表

查看合并后的分区

MySql之分区分表

案例:未分区表和分区表性能测试

1.创建数据库和一个未分区的表

MySql之分区分表

2.创建分区表,按日期的年份拆分

MySql之分区分表

3.插入10万条测试语句

MySql之分区分表

4.在表中插入数据

MySql之分区分表

查询表明分区表比未分区表的执行时间少很多。

MySql之分区分表

在通过explain语句来分析执行情况

explain语句显示了SQL查询要处理的记录数目可以看出分区表比未分区表的明显扫描的记录要少很多。

MySql之分区分表

创建索引后与不不创建索引差异不大 1不创建索引重启mysql服务在次查询即可

MySql之分区分表

分区表的类型

1.RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。这些区间要连续且不能相互重叠,使用VALUES LESS THAN操作符来进行定义。

案例:

MySql之分区分表

创建maxvalue分区,所有不在指定范围内的记录都会被存储到maxvalue所在的分区中。

MySql之分区分表

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

LIST分区通过使用“PARTITION BY LIST(expr)”来实现,其中“expr” 是某列值或一个基于某个列值、并返回一个整数值的表达式,然后通过“VALUES IN (value_list)”的方式来定义每个分区,其中“value_list”是一个通过逗号分隔的整数列表。

案例:

MySql之分区分表

查询语句

MySql之分区分表

3.HASH分区 这种模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。

hash分区的目的是将数据均匀的分布到预先定义的各个分区中,保证各分区的数据量大致一致。在RANGE和LIST分区中,必须明确指定一个给定的列值或列值集合应该保存在哪个分区中;而在HASH分区中,MYSQL自动完成这些工作,用户所要定一个列值或者表达式,以及指定被分区的表将要被分割成的分区数量。

MySql之分区分表

hash的分区函数页需要返回一个整数值。partitions子句中的值是一个非负整数,不加的partitions子句的话,默认为分区数为1。

MySql之分区分表

该记录会被放入分区p2中。因为插入2010-04-01进入表t_hash,那么

MOD(YEAR('2010-04-01'),4)=2

MySql之分区分表

MySql之分区分表

4.key分区:key分区和hash分区相似,不同在于hash分区是用户自定义函数进行分区,key分区使用mysql数据库提供的函数进行分区,NDB cluster使用MD5函数来分区,对于其他存储引擎mysql使用内部的hash函数。

MySql之分区分表

上面的RANGE、LIST、HASH、KEY四种分区中,分区的条件必须是×××,如果不是×××需要通过函数将其转换为×××。

 

5.columns分区mysql-5.5开始支持COLUMNS分区,可视为RANGE和LIST分区的进化,COLUMNS分区可以直接使用非×××数据进行分区。COLUMNS分区支持以下数据类型:
  所有×××,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL则不支持。
  日期类型,如DATE和DATETIME。其余日期类型不支持。
  字符串类型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT类型不支持。
  COLUMNS可以使用多个列进行分区。

 

 

您可能感兴趣的文档:

--结束END--

本文标题: MySql之分区分表

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

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

猜你喜欢
  • MySql之分区分表
    MySql之分区分表分表的概念分表:将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些表可以分布在同一块磁盘上,也可...
    99+
    2024-04-02
  • mysql分区表:日期分区
    mysql分区表:日期分区 1.创建分区表2.查看分区3.添加分区4.存储过程:分区删除与创建5.事件定时6.触发器设计:子表每插入一行,总表获得一行7.创建索引8.添加枚举型字段 1.创建分区表 CREATE TAB...
    99+
    2023-08-21
    mysql 数据库
  • MySQL分区之LIST分区详解
    目录介绍一、创建分区1.插入数据2.插入不在列表中的值二、分区管理1.增加分区2.合并分区3.拆分分区4.删除分区三、其它分区1.对时间字段进行分区四、移除表的分区参考:总结介绍 L...
    99+
    2024-04-02
  • MySQL分区之RANGE分区详解
    目录介绍一、RANGE分区1.创建分区2.性能分析3.增加分区4.删除分区5.拆分合并分区二、日期字段分区方法三、null值处理四、移除表的分区总结介绍 RANGE分区基于一个给定的...
    99+
    2024-04-02
  • MySQL分区之KEY分区详解
    目录介绍一、常规KEY二、LINEAR KEY三、分区管理四、移除表的分区总结介绍 KEY分区和HASH分区相似,但是KEY分区支持除text和BLOB之外的所有数据类型的分区,而H...
    99+
    2024-04-02
  • MySQL分区之HASH分区详解
    目录介绍一、常规HASH二、线性HASH(LINEAR HASH)三、分区管理1.合并分区2.增加分区四、移除表的分区总结介绍 基于给定的分区个数,将数据分配到不同的分区,HASH分...
    99+
    2024-04-02
  • MySQL分区之子分区详解
    目录介绍一、创建子分区1.不定义每个子分区2.定义每个子分区3.测试数据二、分区管理1.合并分区2.拆分分区3.删除分区三、错误的子分区创建四、移除表的分区总结介绍 子分区其实是对每...
    99+
    2024-04-02
  • mysql分区及分表(一)
                                 ...
    99+
    2024-04-02
  • mysql分区及分表(二)
                                mysql...
    99+
    2024-04-02
  • oracle中分表之表分区的示例分析
    这篇文章将为大家详细讲解有关oracle中分表之表分区的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。此文从以下几个方面来整理关于分区表的概念及操作: ...
    99+
    2024-04-02
  • MySQL 数据库分表分区
    博主QQ:819594300博客地址:http://zpf666.blog.51cto.com/有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!一、分表为什么要分表?我们的数据库数据越来越大,随之...
    99+
    2024-04-02
  • mysql分表分区的示例分析
    这篇文章给大家介绍mysql分表分区的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗...
    99+
    2024-04-02
  • mysql分表之水平分割
    一、背景 老大安排要对某张大容量表进行分割,根据年份分割成多张表。 二、水平分割 水平拆分是指数据表行的拆分,表的行数超过百万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。 定义规则分表后,表结构与原表相同,查询性能会提高...
    99+
    2016-07-24
    mysql分表之水平分割
  • 详解MySQL分区表
    前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表。但是对于应用程序来讲,分区的表和没有分区的表是一样的。换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理。本篇文章给大...
    99+
    2022-05-27
    mysql 分区 mysql 分区表
  • mysql分区表笔记
    mysql分区表    mysql分区表是一个独立的逻辑表,但是底层由多个物理字表组成。    对分区的请求,都会通过句柄对象转化成对存储引擎接口的调用。所以分区对于...
    99+
    2024-04-02
  • MySQL 分区表设计
    MySQL 分区表设计 1、分区表设计方案 当设计 MySQL 分区表时,需要考虑以下几个方面:分区策略、分区字段、分区数量和分区函数。下面是一个详细的示例,展示了如何设计和执行分区表的增删改查操...
    99+
    2023-10-05
    mysql 数据库 分区表 sql
  • MySQL的分表和分区介绍
        在日常开发或维护中经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果...
    99+
    2024-04-02
  • MySQL:分库分表与分区的区别和思考
    一.分分合合 说过很多次,不要拘泥于某一个技术的一点,技术是相通的。重要的是编程思想,思想是最重要的。当数据量大的时候,需要具有分的思想去细化粒度。当数据量太碎片的时候,需要具有合的思想来粗化粒度。 1.1 分 很多技术都运用了分...
    99+
    2017-07-09
    MySQL:分库分表与分区的区别和思考
  • Oracle 12.2之后ALTER TABLE .. MODIFY转换非分区表为分区表
    说明 本文将包含如下内容: ORACLE 19.5 测试ALTER TABLE ... MODIFY转换非分区表为分区表 创建测试表 CREATE TABLE TEST_MODIF...
    99+
    2024-04-02
  • 转:Mysql 分区 分表相关总结
    拆分策略选择 其实拆分很灵活,有的是垂直切分,将一个库拆成两个或多个,将有相关联的表放在一个库里。有的是水平切分将数据量大的表按照一定逻辑进行拆分。个人感觉垂直切分的相对来说缓解了IO的瓶颈,而水...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作