1.分区表概述:

1.分区表的主要意义在于,对于表结构进行划分,不同的数据进入不同的分区中,以便于在查询过程中,只查找指定分区的数据,减少数据库扫描的数据量。

2.虽然从逻辑上看分区表是一张表,但是底层却是有不同的物理分区构成,对应的底层就是不同的数据文件。

限制:唯一性索引,必须在分区列上.因为表在底层是分成的.每一段索引在每一段列上,不能跨分区进行唯一判断. 

 

2.分区处理NULL值的方式:

range分区表: null被保存在最小分区

list分区: null被保存在0分区

hash和key: 被当做0

为了避免这种情况的产生,建议分区键设置成NOT NULL。

3.range分区

range分区就是范围分区,根据被分区列的数据的范围,将数据路由到不同的分区中.

range:

优点:可以进行范围查询,并且筛选分区

缺点:特定分区可能数据量很大,或者具有比较多的热数据,不能平均分散数据.

关于范围分区,如果创建范围分区是为了解决单个文件的写压力问题,尽量不要使用递增的id作为分区列。

建range分区表语句:

create table emp_range

(empno varchar(20) not null,

empname varchar(20),

deptno int,

birthdate date,

salary int

)

partition by range(salary)

(

partition p1 values less than (1000),

partition p2 values less than (2000),

partition p3 values less than maxvalue

);

查看表文件结构:

[root@master test1]# ls |grep emp

emp_range.frm

emp_range#P#p1.ibd

emp_range#P#p2.ibd

emp_range#P#p3.ibd

4.list 列表分区:

list就是列表分区,将固定的值,插入到固定的分区之中

建list分区表语句:

create table emp_list

(empno varchar(20) not null ,

empname varchar(20),

deptno int,

birthdate date not null,

salary int

)

partition by list(deptno)

(

partition p1 values in (1),

partition p2 values in (2),

partition p3 values in (3)

);

表文件结构:

[root@master test1]# ls |grep list

emp_list.frm

emp_list#P#p1.ibd

emp_list#P#p2.ibd

emp_list#P#p3.ibd

5.hash分区:

先对列进行hash计算,然后使用取余算法对数据进行路由.

Hash分区主要用来分散热点读,确保数据在预先确定个数的分区中尽可能平均分布。

hash优点:可以打散热数据         缺点:不能进行范围查询

建hash分区语句:

create table emp_hash

(empno varchar(20) not null ,

empname varchar(20),

deptno int,

birthdate date not null,

salary int

)

partition by hash(year(birthdate))

partitions 4;

表文件结构:

[root@master test1]# ls |grep hash

emp_hash.frm

emp_hash#P#p0.ibd

emp_hash#P#p1.ibd

emp_hash#P#p2.ibd

emp_hash#P#p3.ibd

 

6.key分区:

hash分区只能支持数值的分区,key分区可以支持字符串分区

建key分区语句:

create table emp_key

(empno varchar(20) not null ,

empname varchar(20),

deptno int,

birthdate date not null,

salary int

)

partition by key(birthdate)

partitions 4;

表文件结构:

[root@master test1]# ls |grep key

emp_key.frm

emp_key#P#p0.ibd

emp_key#P#p1.ibd

emp_key#P#p2.ibd

emp_key#P#p3.ibd

7.查看分区表:

查看分区表的建表语句: show create table emp_list;

查看分区使用情况:从information_schema.partitions表中查询

mysql> select partition_name,partition_expressio-n,partition_description, table_rows 
from 
INFORMATION_SCHEMA.partitions 
where  table_schema='test1' 
 and table_name = 'emp_list';

其中
table_schema为database,而table_name为分区表。expressio-n为敏感词(分开写了)

+----------------+----------------------+-----------------------+------------+

| partition_name | partition_expressio-n | partition_description
| table_rows |

+----------------+----------------------+-----------------------+------------+

| p1     
     
 | deptno   
     
     |
1     
     
     
   | 
     
  2 |

| p2     
     
 | deptno   
     
     |
2     
     
     
   | 
     
  2 |

| p3     
     
 | deptno   
     
     |
3     
     
     
   | 
     
  1 |

+----------------+----------------------+-----------------------+------------+

mysql> select count(1) from emp_list;

+----------+

| count(1) |

+----------+

|     
  5 |

+----------+

1 row in set (0.00 sec)

mysql之分区表的更多相关文章

  1. Mysql的分区表

    概论: 分区表一般用作Mysql库表的水平切割(也就是常说的mysql性能优化的几种通用手法"读写分离.分库分表"中的一种),适用于单表的数据量可能很大的场景.因为分区表可以将一个 ...

  2. mysql使用 分区表使用,常用sql

    mysql使用 分区表使用,常用sql 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/84839478未经博主允许不得转载 ...

  3. mysql 案例~ 分区表

    一 简介:今天来聊聊分区表的概念和维护二分区的优点:  1.提高查询性能:只需要搜索特定分区,而非整张表,提高了查询速度.  2.节约维护时间:单个分区的数据装载,索引重建,备份,维护远远小于整张表的 ...

  4. 【mysql】分区表

    分区表是什么? 分区表可以按照事先创建的规则,对mysql的记录进行分组,每一个组具有一个独立的逻辑单元来存储该组的数据.典型的如:按照创建时间的年份分组,按照id的顺序分组(每1000万条数据分一个 ...

  5. 将mysql非分区表转换为分区表(转)

    查看表的分布状况mysql> select count(*) from  justin;+----------+| count(*) |+----------+|  5845246 |+---- ...

  6. MySQL分区表的使用

    MySQL使用分区表的好处: 1,可以把一些归类的数据放在一个分区中,可以减少服务器检查数据的数量加快查询. 2,方便维护,通过删除分区来删除老的数据. 3,分区数据可以被分布到不同的物理位置,可以做 ...

  7. 互联网公司为啥不使用mysql分区表?

    转:http://www.cnblogs.com/zhulin516114/p/7306708.html 缘起:有个朋友问我分区表在58的应用,我回答不出来,在我印象中,百度.58都没有听说有分区表相 ...

  8. 【58沈剑架构系列】互联网公司为啥不使用mysql分区表?

    缘起:有个朋友问我分区表在58的应用,我回答不出来,在我印象中,百度.58都没有听说有分区表相关的应用,业内进行一些技术交流的时候也更多的是自己分库分表,而不是使用分区表.于是去网上查了一下,并询问了 ...

  9. MYSQL分区表功能测试简析

    1.查看Mysql版本是否支持分区  SHOW VARIABLES LIKE '%partition%';   +-------------------+-------+ | Variable_nam ...

随机推荐

  1. Gradle的构建过程都不会?带你全面了解Android如何自定义Gradle 插件

    目前 Android 工程的默认构建工具为 Gradle,我们在构建 APK 的时候往往会执行 ./gradlew assembleDebug 这样的命令.. 那么这个命令到底代表着什么含义呢?命令的 ...

  2. Asp常见函数

    ASP语言的特点: 1.允许使用VBscript或java script简易Script语言,并可在文件中结合Html: 2.无需编译,由WEBserver执行产生: 3.与任何ActiveX Scr ...

  3. 基于python实现单链表代码

    1 """ 2 linklist.py 3 单链表的构建与功能操作 4 重点代码 5 """ 6 7 class Node: 8 " ...

  4. Django创建表时报错django.db.utils.InternalError: (1366问题解决记录

    问题出现 执行Python manage.py makemigrations生成创建表的py文件 执行python manage.py migrate创建数据表 界面出现报错 问题原因 网上搜索原因, ...

  5. 一文读懂MySQL的事务隔离级别及MVCC机制

    回顾前文: 一文学会MySQL的explain工具 一文读懂MySQL的索引结构及查询优化 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) 就软件开 ...

  6. python中实现格式化输入(史上最简单、最高效的实现方法,不借助任何模块)

    今天我在写python作业时突然想到格式化输入一段文字,譬如只需读取输入的前几个字符就行,而不幸的是,python中的输入并没有c中的read().getchar()函数,于是我网上搜了一下,网上的解 ...

  7. ORA-12609报错分析

    问题:监控不断告警ORA-12609 Wed 10/14/2020 10:40 AM 12CRAC1-ALERT中出现ORA错误,请检查 171- nt OS err code: 0 172- Cli ...

  8. FFmpeg 将大量图片合成为视频 video

    1.基本格式终端输入: ffmpeg -f image2 -i /home/ttwang/images/image%d.jpg tt.mp4其中/home/ttwang/images/images%d ...

  9. Python&&Pip

    Pip简易使用 使用pip list命令就可以发现自己电脑里所安装库的名字.如图展示的出来的有package.Version.Location三列,package是下载的python库名,Versio ...

  10. D. Rescue Nibel! 解析(思維、組合、離散化、差分)

    Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...