返回顶部
首页 > 资讯 > 数据库 >MySQL分区学习
  • 855
分享到

MySQL分区学习

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

https://dev.Mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html 一、   

https://dev.Mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html

一、      分区概述

分区是一种表设计模式,自5.1版本开始支持分区,逻辑上是一张表,物理上可能是多个对象。其中MyISAM、INNODB、NDB等存储引擎都支持分区,但CSV、MERGE、FEDORATED不支持分区。

1.      分区种类

水平分区:对表记录进行拆分,同一表的不同行记录分配到不同的物理文件中。

         Range 分区:行根据基于属于一个给定连续区间的列值放入分区,自mysql5.5开始支持列范围分区,最常用的分区。

         List分区:和Range分区一样,只是List分区是面对离散值,自MYsql5.5开支支持列List分区。

         Hash分区:根据用户自定义的表达式的返回值进行分区,返回值不能为负数。

         Key分区:根据MYSQL数据库提供的散列函数来进行分区。

 

垂直分区:对表字段进程拆分(MYSQL暂不支持),同一表中不同的列分配在不同的物理文件中。

 

2.      分区优、缺点

优点:

         可极大提高查询效率;

         主要用于数据库高可用性,方便管理;

 缺点:

         无论何种分区,如果表中存在主键或者唯一键索引,分区列必须是唯一索引的一个组成部分。

 

二、      分区类型详解

1.      Range分区

 create table t_range(id int)

partition by range(id)

(partition p0 values less than (100),

partition p1 values less than(500),

partition p2 values less than maxvalue );

 

insert into t_range values(10),(120),(600);

 (root:localhost:Sat Jul  8 20:05:12 2017)[dbtest]> \! ls -lnrth /home/mysql/dbtest

total 320K

-rw-rw---- 1 500 500   61 Mar 17 15:58 db.opt

-rw-rw---- 1 500 500   32 Jul  8 20:04 t_range.par               ##存储分区信息

-rw-rw---- 1 500 500 8.4K Jul  8 20:04 t_range.frm

-rw-rw---- 1 500 500  96K Jul  8 20:05 t_range#P#p2.ibd

-rw-rw---- 1 500 500  96K Jul  8 20:05 t_range#P#p1.ibd

-rw-rw---- 1 500 500  96K Jul  8 20:05 t_range#P#p0.ibd

 

(root:localhost:Sat Jul  8 20:14:13 2017)[(none)]> select * from infORMation_schema.partitions where table_name='t_range' \G

*************************** 1. row ***************************

                TABLE_CATALOG: def

                 TABLE_SCHEMA: dbtest

                   TABLE_NAME: t_range

               PARTITION_NAME: p0

            SUBPARTITION_NAME: NULL

   PARTITION_ORDINAL_POSITION: 1

SUBPARTITION_ORDINAL_POSITION: NULL

             PARTITION_METHOD: RANGE

          SUBPARTITION_METHOD: NULL

         PARTITION_EXPRESSION: id

      SUBPARTITION_EXPRESSION: NULL

        PARTITION_DESCRIPTION: 100

                   TABLE_ROWS: 1

               AVG_ROW_LENGTH: 16384

                  DATA_LENGTH: 16384

              MAX_DATA_LENGTH: NULL

                 INDEX_LENGTH: 0

                    DATA_FREE: 0

                  CREATE_TIME: NULL

                  UPDATE_TIME: NULL

                   CHECK_TIME: NULL

                     CHECKSUM: NULL

            PARTITION_COMMENT:

                    nodeGROUP: default

              TABLESPACE_NAME: NULL

*************************** 2. row ***************************

                TABLE_CATALOG: def

                 TABLE_SCHEMA: dbtest

                   TABLE_NAME: t_range

               PARTITION_NAME: p1

            SUBPARTITION_NAME: NULL

   PARTITION_ORDINAL_POSITION: 2

SUBPARTITION_ORDINAL_POSITION: NULL

             PARTITION_METHOD: RANGE

          SUBPARTITION_METHOD: NULL

         PARTITION_EXPRESSION: id

      SUBPARTITION_EXPRESSION: NULL

        PARTITION_DESCRIPTION: 500

                   TABLE_ROWS: 1

               AVG_ROW_LENGTH: 16384

                  DATA_LENGTH: 16384

              MAX_DATA_LENGTH: NULL

                 INDEX_LENGTH: 0

                    DATA_FREE: 0

                  CREATE_TIME: NULL

                  UPDATE_TIME: NULL

                   CHECK_TIME: NULL

                     CHECKSUM: NULL

            PARTITION_COMMENT:

                    NODEGROUP: default

              TABLESPACE_NAME: NULL

*************************** 3. row ***************************

                TABLE_CATALOG: def

                 TABLE_SCHEMA: dbtest

                   TABLE_NAME: t_range

               PARTITION_NAME: p2

            SUBPARTITION_NAME: NULL

   PARTITION_ORDINAL_POSITION: 3

SUBPARTITION_ORDINAL_POSITION: NULL

             PARTITION_METHOD: RANGE

          SUBPARTITION_METHOD: NULL

         PARTITION_EXPRESSION: id

      SUBPARTITION_EXPRESSION: NULL

        PARTITION_DESCRIPTION: MAXVALUE

                   TABLE_ROWS: 1

               AVG_ROW_LENGTH: 16384

                  DATA_LENGTH: 16384

              MAX_DATA_LENGTH: NULL

                 INDEX_LENGTH: 0

                    DATA_FREE: 0

                  CREATE_TIME: NULL

                  UPDATE_TIME: NULL

                   CHECK_TIME: NULL

                     CHECKSUM: NULL

            PARTITION_COMMENT:

                    NODEGROUP: default

              TABLESPACE_NAME: NULL

3 rows in set (0.00 sec)

 

2.      List分区

 

-rw-rw---- 1 500 500   28 Jul  8 21:39 t_list.par

-rw-rw---- 1 500 500 8.4K Jul  8 21:39 t_list.frm

-rw-rw---- 1 500 500  96K Jul  8 21:39 t_list#P#p1.ibd

-rw-rw---- 1 500 500  96K Jul  8 21:39 t_list#P#p0.ibd

 

CREATE TABLE `t_list` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

;

 

3.      Hash分区

HASH分区将数据均匀的分布到预先定义的各个分区中,保障各个分区的数据数量大致一样的。在range和list分区定义时,必须明确指定分区的列值或列值集合保存在哪个分区中,而hash分区自动完成列值的分配,平均的将数据放在不同的分区。

 

CREATE TABLE `t_hash` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

-rw-rw---- 1 500 500   32 Jul  8 21:53 t_hash.par

-rw-rw---- 1 500 500 8.4K Jul  8 21:53 t_hash.frm

-rw-rw---- 1 500 500  96K Jul  8 21:54 t_hash#P#p3.ibd

-rw-rw---- 1 500 500  96K Jul  8 21:54 t_hash#P#p2.ibd

-rw-rw---- 1 500 500  96K Jul  8 21:54 t_hash#P#p1.ibd

-rw-rw---- 1 500 500  96K Jul  8 21:54 t_hash#P#p0.ibd

 

4.      Key分区

Hash分区根据用户自定义的函数进行分区,key使用MYSQL数据库提供的函数进行分区。

CREATE TABLE `t_key` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

;

5.      Columns分区

Range、List、Hash和Key分区都是针对整型分区,如果不是整型分区,则需要通过相关函数转换。但通过columns分区,不需要转换。

Columns支持int/small int/tinyint/bigint/date/datetime/char/varchar/binary支持,对float/decimal/blob/text不支持

create table t_range_columns(dtime datetime)

partition by range columns (dtime)

(partition p0 values less than ('2016-01-01'),

partition p1 values less than('2017-01-01'),

partition p2 values less than maxvalue );

6.      子分区

在分区的基础上再进行分区,也称之为复合分区。

 

三、      分区维护管理

Alter table table_name

  | ADD PARTITION (partition_definition)

  | DROP PARTITION partition_names

  | TRUNCATE PARTITION {partition_names | ALL }

  | COALESCE PARTITION number

  | REORGANIZE PARTITION partition_names INTO (partition_definitions)

  | ANALYZE PARTITION  {partition_names | ALL }

  | CHECK PARTITION  {partition_names | ALL }

  | OPTIMIZE PARTITION  {partition_names | ALL }

  | REBUILD PARTITION  {partition_names | ALL }

  | REPaiR PARTITION  {partition_names | ALL }

  | REMOVE PARTITIONING

 

1.      增加分区

alter table t_range add partition ( partition p2 values less than  maxvalue) ;

 

2.      删除分区

alter table t_range drop partition p2;

alter table t_list remove partitioning;

 

3.      查看分区

 

information_schema.partitions

 

4.      清除分区数据

 

alter table t_range truncate partition p2;

 

5.      解析分区

 

(root:localhost:Sat Jul  8 21:30:03 2017)[dbtest]> explain partitions select * from  t_range \G

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: t_range

   partitions: p0,p1,p2

         type: ALL

possible_keys: NULL

          key: NULL

      key_len: NULL

          ref: NULL

         rows: 3

        Extra: NULL

1 row in set (0.00 sec)

 

(root:localhost:Sat Jul  8 21:30:18 2017)[dbtest]> explain partitions select * from  t_range  where id=800\G

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: t_range

   partitions: p2

         type: ALL

possible_keys: NULL

          key: NULL

      key_len: NULL

          ref: NULL

         rows: 2

        Extra: Using where

1 row in set (0.00 sec)

(只查询指定的分区)

 

6.      交换分区

MYSQL5.6支持了交换分区,具体语法如下:

 

alter table t_range  exchange partition p0 with table t;

 

将分区表t_range的P0分区的数据交换到t表中,而t表的数据也会交换到t_range表中,交换是双向的。

 

 

您可能感兴趣的文档:

--结束END--

本文标题: MySQL分区学习

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

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

猜你喜欢
  • MySQL分区学习
    https://dev.mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html 一、   ...
    99+
    2024-04-02
  • MySQL学习笔记(14):分区
    本文更新于2019-06-30,使用MySQL 5.7,操作系统为Deepin 15.4。 目录分区类型Range分区List分区Columns分区Hash分区Key分区子分区分区管理Range分区和List分区的分区管理Hash...
    99+
    2015-11-15
    MySQL学习笔记(14):分区
  • MySQL学习记录之KEY分区引发的血案
    需求背景 业务表tb_image部分数据如下所示,其中id唯一,image_no不唯一。image_no表示每个文件的编号,每个文件在业务系统中会生成若干个文件,每个文件的唯一ID就是字段id: 业务表tb_ima...
    99+
    2022-05-30
    mysql key分区 查看mysql表key mysql数据分区
  • SpringBoot2学习之springboot与spring区别分析
    目录springboot与spring区别一、spring 可以做什么二、springbootSpringBoot 优点SpringBoot 缺点三、如何学习 springboot文...
    99+
    2024-04-02
  • Linux 学习基础入门之Linux分区
    安装Linux,首先要有镜像文件,以CentOS为例,可以在官网或者国内某些镜像Server来获取镜像。根据自己的需要可以选择是 Everything 或者minimal iso.这里不写关于安装的细节,对于其中的一些关键步骤做些说明。1....
    99+
    2023-06-05
  • mysql学习笔记之explain分析
    mysql explain功能中展示各种信息的解释: id:优化器选定的执行计划中查询的序列号。 select_type:所用的查询类型,主要由以下这集中查询类型。   . DEPENDENT UNION:子查询中的UN...
    99+
    2017-08-03
    mysql学习笔记之explain分析
  • mysql学习笔记之profiling分析
    要想有画一条query,就需要清楚这条query的性能瓶颈到底在哪里,mysql的profiler是一个使用非常方便的查询诊断分析工具,通过该工具可以获取一条查询在整个执行过程中多种资源的消耗情况,例如内存消耗、I/O消耗和CPU消耗等。 ...
    99+
    2017-03-12
    mysql学习笔记之profiling分析
  • Mysql的学习
    数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库? * 用于存储和管理数据的仓库。 3. 数据库的特点: 1. 持久化存储数据的。其实数据库就是一个文件系统 2. 方便存储和管...
    99+
    2018-06-07
    Mysql的学习
  • MySQL学习(一)
    引言 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 概念 数据库(Data...
    99+
    2014-10-14
    MySQL学习(一) 数据库入门 数据库基础教程 数据库 mysql
  • MYSQL-mysqldump学习
    mysqldump导出的文件其实是个sql脚本 举例: mysqldump --single-transaction --all-databases > /mysql/mysqldump_201806...
    99+
    2024-04-02
  • Oracle 学习之 性能优化(十二) 分区表
    一、分区概念   Oracle允许将表、索引、索引组织表细分成更小的片,每个片我们称之为分区。分区有其自己的名字和存储参数。  如下图:每行数据只能属于一个分区,分区键决定数据...
    99+
    2024-04-02
  • 深度学习和机器学习有哪些区别
    本文小编为大家详细介绍“深度学习和机器学习有哪些区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“深度学习和机器学习有哪些区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。深度学习和机器学习最大的区别就是“性能...
    99+
    2023-06-29
  • MySQL学习 2019-12
    启动mysql服务: net start mysql 关闭mysql服务: net stop mysql cmd清屏: cls mysql -V 输出版本信息并且退出 mysql -u 用户名 mysql -p 密码 mysql ...
    99+
    2015-03-19
    MySQL学习 2019-12
  • MySQL入门学习
    ...
    99+
    2015-02-25
    MySQL入门学习
  • MySQL事务学习
    MySQL事务: 1、事务特性:原子性,一致性,隔离性,持久性 原子性:对一些操作,要么同时成功,要么同时失败。 一致性:对一些操作,处理结果必须一致的,比如转账:A转给B,那么A账户减少100元,则B账户必须增加100元。 隔离性:多个...
    99+
    2019-11-20
    MySQL事务学习
  • MySQL学习指南
    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relation...
    99+
    2016-11-25
    MySQL学习指南
  • MySQL学习笔记
    作者: Grey 原文地址:MySQL学习笔记 说明 注:本文中的SQL语句如果用到了特定方言,都是基于MySQL数据库。 关于DDL DDL 的英文全称是 Data Definition Language,中文是数据定义语言。它定义了...
    99+
    2015-01-17
    MySQL学习笔记
  • mysql学习-安装
    一、mysql安装包解压,注意下载的mysql包必须与操作系统版本需求一致。 [root@node1 soft]# ls mysql-5.7.11-1.el5.i686.rpm-bundle.tar [ro...
    99+
    2024-04-02
  • MySQL 学习笔记
    😀😀😀创作不易,各位看官点赞收藏. 文章目录 MySQL 学习笔记1、`DQL` 查询语句1.1、基本查询1.2、函数查询1.2.1、单行函数1...
    99+
    2023-10-01
    mysql 学习 笔记
  • 机器学习与深度学习的区别有哪些
    机器学习和深度学习是两个相关但不完全相同的概念。以下是它们之间的一些区别:1. 概念:机器学习是一种广义的概念,指的是机器通过学习数...
    99+
    2023-09-21
    机器学习 深度学习
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作