我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql表分区技术详细介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql表分区技术详细介绍

1、概述
    数据库单表到达一定量后,性能会有衰减,像mysql\sql server等犹为明显,所以需要把这些数据进行分区处理。同时有时候可能出现数据剥离什么的,分区表就更有用处了!
    MySQL 5.1 中新增的分区(Partition)功能就开始增加,优势也越来越明显了:
--与单个磁盘或文件系统分区相比,可以存储更多的数据
--很容易就能删除不用或者过时的数据
--一些查询可以得到极大的优化
--涉及到 SUM()/COUNT() 等聚合函数时,可以并行进行
--IO吞吐量更大
--分区允许可以设置为任意大小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。

2、分区技术支持
    在5.6之前,使用这个参数查看当将配置是否支持分区
mysql> SHOW VARIABLES LIKE '%partition%';
+-----------------------+-------+
|Variable_name          | Value |
+-----------------------+-------+
| have_partition_engine | YES   |
+-----------------------+-------+
如果是yes表示你当前的配置支持分区
    在5.6及以采用后,则采用如下方式进行查看
mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+---------+---------+
| Name                       | Status   | Type               | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
..................................................................................
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
+----------------------------+----------+--------------------+---------+---------+
42 rows in set (0.00 sec)
最后一行,可以看到partition是ACTIVE的,表示支持分区

3、分区类型及举例
3.1范围分区
RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。如时间,连续的常量值等
--按年分区
mysql> use mytest;
Database changed
mysql> create table range_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) partition by range(year(credate))(
    -> partition p2011 values less than (2011),
    -> partition p2012 values less than (2012),
    -> partition p2013 values less than (2013),
    -> partition p2014 values less than (2014),
    -> partition p2015 values less than maxvalue
    -> );
Query OK, 0 rows affected (0.12 sec)

3.2列举分区
LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。比如说类似性别(1,2)等属性值。
mysql> create table list_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> sex int(1) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) partition by list(sex) (
    -> partition psex1 values in(1),
    -> partition psex2 values in(2));
Query OK, 0 rows affected (0.06 sec)

注意,list只能是数字,使用字符会报错ERROR 1697 (HY000): VALUES value for partition 'psex1' must have type INT

3.3离散分区
HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包>含MySQL中有效的、产生非负整数值的任何表达式。
--以int字段hash分区
create table hash_p(
perid int(11),
pername char(12) not null,
sex int(1) not null,
monsalary DECIMAL(10,2),
credate datetime
) partition by hash (perid)
partitions 8;
--以时间函数hash分区
mysql> create table hash_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> sex int(1) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) partition by hash (year(credate))
    -> partitions 8;
Query OK, 0 rows affected (0.11 sec)

3.4键值分区
KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含>整数值。
其分区方法与hash很相似
mysql> create table key_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> sex int(1) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) partition by key (perid)
    -> partitions 8;
Query OK, 0 rows affected (0.12 sec)

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

mysql> create table range_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) PARTITION BY RANGE COLUMNS (credate)(
    -> partition p20151 values less than ('2015-04-01'),
    -> partition p20152 values less than ('2015-07-01'),
    -> partition p20153 values less than ('2015-10-01'),
    -> partition p20154 values less than ('2016-01-01'),
    -> partition p20161 values less than ('2016-04-01'),
    -> partition partlog values less than maxvalue
    -> );
Query OK, 0 rows affected (0.12 sec)

4、综述
    总体说来,mysql的分区还在进步,需要进一步的加强,与oracle相比,还有差距!比如说基于非数据类型的分区技术,目前还没有!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql表分区技术详细介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql创建表分区详细介绍及示例

mysql创建表分区详细介绍及示例 1. 基本概念1.1 什么是表分区?1.2 表分区与分表的区别1.3 表分区有什么好处?1.4 分区表的限制因素 2. 如何判断当前MySQL是否支持分区?3.分区类型详解3.1 MySQL支
2023-08-17

java的反射技术详细介绍

本篇内容主要讲解“java的反射技术详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java的反射技术详细介绍”吧!反射的定义:审查元数据并收集关于它的类型信息的能力。下面介绍java的反
2023-06-17

详细介绍网络新兴的技术

  网络工程师是通过学习和训练,掌握网络技术的理论知识和操作技能的网络技术人员。网络工程师能够从事计算机信息系统的设计、建设、运行和维护工作。今天就跟着小编一起来看一看:详细介绍网络新兴的技术。  小编相信大家都应该有听说过一句话,从胜利走向胜利,是胜利者的哲学。同样的道理,大家仅仅只有不断的获取得到领先,才可以保持领
详细介绍网络新兴的技术
2024-04-18

linux下磁盘分区的详细介绍

这篇文章主要讲解了“linux下磁盘分区的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux下磁盘分区的详细介绍”吧!Centos下磁盘管理 1.磁盘分区格式说明linu
2023-06-13

mysql中int、bigint、smallint 和 tinyint的区别详细介绍

在MySQL中,int、bigint、smallint和tinyint都是整数数据类型,它们之间的区别主要体现在取值范围和存储空间上。1. int:int是整数数据类型中最常用的类型,占据4个字节(32位),取值范围为-2,147,483,
2023-08-14

Windows 10 中文技术预览版个人试用报告详细介绍

使用虚拟机安装 在虚拟机上安装这个版本,装的时候会提示“找不到驱动程序”的经典问题。在这种情况下也可以尝试用多种方法解决。 官方的办法简单粗暴:直接升级到最新版 Parallels 就可以了。但是有些人用的并非正版。
2023-06-11

编程热搜

目录