IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 运维利器之mysql进行表的分区 -> 正文阅读

[大数据]运维利器之mysql进行表的分区

运维利器之mysql进行表的分区

特别声明一下哈,小编不是DBA,所以相对来说对mysql的理解不是那么的透彻,小编可以做到的是确保数据的安全,知道数据怎么存储,才能更好的保护数据,知己知彼,方能百战不殆,哈,最近想到了数据库分区这块,所以也就自己鼓捣鼓捣看看

什么叫做表的分区,这个吧,小编有个外号,他们都叫小编粗人一个,在这里就不多解释了,简单的理解一下就是把一个大表根据相应的条件给分割成好多的小表,来增加数据库的性能,虽然说的有瑕疵,但是可以这样理解

  • 相关优点
  • 支持分表到磁盘,相对来说可以存储更多的数据
  • 部分查询可以得到极大的优化
  • 获得更大的查询吞吐量

基本分区类型

RANGE分区

这个是非常简单理解的,就是说把需要分区的字段具体的点来进行分区,比如说年龄,将小于10岁的分一个区,小于20岁的分一个区,小于30岁的分一个区,其他年龄的分一个区。这里需要注意得是分区的名字是不区分大小写的,也就是说p01==P01,这两个是一个表的分区


###创建表的时候进行分区
mysql> create table t1 (id int,name varchar(20),age int)
    -> partition by range(age)
    -> (
    -> partition p01 values less than (10),
    -> partition p02 values less than (20),
    -> partition p03 values less than (30),
    -> partition p04 values less than (maxvalue)
    -> );
Query OK, 0 rows affected (0.07 sec)

###检验分区后的效果

[root@lnmp mysql]# ll test2      
总用量 404
-rw-rw---- 1 mysql mysql    61 11月 14 16:20 db.opt
-rw-rw---- 1 mysql mysql  8614 11月 14 16:23 t1.frm
-rw-rw---- 1 mysql mysql    36 11月 14 16:23 t1.par
-rw-rw---- 1 mysql mysql 98304 11月 14 16:23 t1#P#p01.ibd				###分区后的效果
-rw-rw---- 1 mysql mysql 98304 11月 14 16:23 t1#P#p02.ibd				###分区后的效果
-rw-rw---- 1 mysql mysql 98304 11月 14 16:23 t1#P#p03.ibd				###分区后的效果
-rw-rw---- 1 mysql mysql 98304 11月 14 16:23 t1#P#p04.ibd				###分区后的效果

LIST分区

这个的话,个人感觉哈,就是把上面的range分区进行了列表话分区,range分区不是一个分区时一个条件吗,但是这个list分区里面可以是多个条件来分成一个区。列如:将物品id为1,2,3分为一个分区,物品id为4,5,6分为一个分区,物品id为7,8,9另一个分区。对,就是这样。

mysql> create table t2 (id int,cid int,name varchar(20),pos_date datetime)
    -> partition by list(cid)
    -> (
    -> partition p01 values in (1,2,3),
    -> partition p02 values in (4,5,6),
    -> partition p03 values in (7,8,9)
    -> );
Query OK, 0 rows affected (0.01 sec)

[root@lnmp test2]# ll t2*
-rw-rw---- 1 mysql mysql  8652 11月 14 19:40 t2.frm
-rw-rw---- 1 mysql mysql    32 11月 14 19:40 t2.par
-rw-rw---- 1 mysql mysql 98304 11月 14 19:40 t2#P#p01.ibd				###分区后的效果
-rw-rw---- 1 mysql mysql 98304 11月 14 19:40 t2#P#p02.ibd				###分区后的效果
-rw-rw---- 1 mysql mysql 98304 11月 14 19:40 t2#P#p03.ibd				###分区后的效果

HASH分区

这个分区的优点在于数据分布的比较均匀,还有一系列的较为复杂的算法,可以这样理解,就比如大于2的分布一个区,小于2的分一个区,当然了,小编的思考还是比较简单了,其实她也是相当的复杂,具体的话可以看看官方的文档喽。

mysql> create table t3 (id int,cid int,name varchar(20),pos_date datetime)
    -> partition by hash (cid)
    -> partitions 4;       ###指定分区数量
Query OK, 0 rows affected (0.01 sec)

[root@lnmp test2]# ll t3*
-rw-rw---- 1 mysql mysql  8652 11月 14 19:54 t3.frm
-rw-rw---- 1 mysql mysql    32 11月 14 19:54 t3.par
-rw-rw---- 1 mysql mysql 98304 11月 14 19:54 t3#P#p0.ibd				###分区后的效果
-rw-rw---- 1 mysql mysql 98304 11月 14 19:54 t3#P#p1.ibd				###分区后的效果
-rw-rw---- 1 mysql mysql 98304 11月 14 19:54 t3#P#p2.ibd				###分区后的效果
-rw-rw---- 1 mysql mysql 98304 11月 14 19:54 t3#P#p3.ibd				###分区后的效果

LINEAR HASH分区

hash分区的一种,优点在于适合处理极其大量数据的表,是一个线性哈希分区,但是也有缺点,导致数据分布不是那么的均匀。导致某一个节点数据较多,查询次数较多。

mysql> create table t4 (id int,cid int,name varchar(20),pos_date datetime) partition by linear hash(cid) partitions 4;
Query OK, 0 rows affected (1.73 sec)

[root@lnmp test2]# ll t4*
-rw-rw---- 1 mysql mysql  8652 11月 14 20:07 t4.frm
-rw-rw---- 1 mysql mysql    32 11月 14 20:07 t4.par
-rw-rw---- 1 mysql mysql 98304 11月 14 20:07 t4#P#p0.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:07 t4#P#p1.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:07 t4#P#p2.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:07 t4#P#p3.ibd

KEY分区

类似于hash分区,hash分区使用的用户自定义的表达式,但是kkey分区的哈希函数是有mysql服务器提供。mysql簇(cluster)使用md5()来实现key分区;对于使用其他存储引擎的表,服务器使用的其自己的内部的哈希函数,这些函数是基于与PASSWORD()一样的运算法则。使用率不是很高,做一了解即可

mysql> create table t5 (id int,cid int,name varchar(20),pos_date datetime) partition by linear key (cid) partitions 4;
Query OK, 0 rows affected (1.64 sec)

[root@lnmp test2]# ll t5*
-rw-rw---- 1 mysql mysql  8652 11月 14 20:18 t5.frm
-rw-rw---- 1 mysql mysql    32 11月 14 20:18 t5.par
-rw-rw---- 1 mysql mysql 98304 11月 14 20:18 t5#P#p0.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:18 t5#P#p1.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:18 t5#P#p2.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:18 t5#P#p3.ibd

多列分区

以前我们在分区的时候,只是用的一个字段来进行的分区,有时候,我们也需要两个或者多个字段来进行分区,于是在mysql5.5后加入COLUMNS关键字允许多个字段来进行分区

mysql> create table t6 (a int,b int,c int)
    -> partition by range columns(a,b)
    -> (
    -> partition p01 values less than (10,10),
    -> partition p02 values less than (10,20),
    -> partition p03 values less than (10,30),
    -> partition p04 values less than (10,maxvalue),
    -> partition p05 values less than (maxvalue,maxvalue)
    -> );


[root@lnmp test2]# ll t6*
-rw-rw---- 1 mysql mysql  8602 11月 14 20:42 t6.frm
-rw-rw---- 1 mysql mysql    44 11月 14 20:42 t6.par
-rw-rw---- 1 mysql mysql 98304 11月 14 20:42 t6#P#p01.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:42 t6#P#p02.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:42 t6#P#p03.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:42 t6#P#p04.ibd
-rw-rw---- 1 mysql mysql 98304 11月 14 20:42 t6#P#p05.ibd


结束语

针对不同的场景要合理的使用不同的分区,小编的责任就是保证数据的安全,知己知彼方能百战不殆,少年们,一起来加油呀.

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 15:56:05  更:2021-11-15 15:57:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:41:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码