mysql partition(mysql range partition,对历史数据建分区)

官方文档:http://www.w3resource.com/mysql/mysql-partition.php

对于分区的类型,以及新建表时就写好分区的话,按照例子做就好了。

这边文章主要是为了处理历史数据,也就是表里已经有海量的数据,比如两年的,一天的数据就是G+的,像这样的话,我们必须及早处理这些没有提前分区的表。

按照range 分区,主要是按照月和天来分区。

e.g.1:

(1)

CREATE TABLE sale_mast (bill_no INT NOT NULL, bill_date date NOT NULL, cust_code VARCHAR(15) NOT NULL, amount DECIMAL(8,2) NOT NULL);

(2)

INSERT INTO sale_mast VALUES (1, ‘2013-01-02‘, ‘C001‘, 125.56), (2, ‘2013-01-25‘, ‘C003‘, 456.50), (3, ‘2013-02-15‘, ‘C012‘, 365.00), (4, ‘2013-03-26‘, ‘C345‘, 785.00), (5, ‘2013-04-19‘, ‘C234‘, 656.00), (6, ‘2013-05-31‘, ‘C743‘, 854.00), (7, ‘2013-06-11‘, ‘C234‘, 542.00), (8, ‘2013-07-24‘, ‘C003‘, 300.00), (8, ‘2013-08-02‘, ‘C456‘, 475.20);

注意:这个表sale_mast是已经有数据的表,称为历史数据;

查看分区前表的信息:

mysql> select partition_name,table_rows from information_schema.partitions where table_name=‘sale_mast‘;+----------------+------------+
| partition_name | table_rows |
+----------------+------------+
| NULL | 9 |
+----------------+------------+
1 row in set (0.00 sec)

注意:range 分区的 values必须是int类型.

第一种分区:然后对sale_mast 进行按月分区:

ALTER TABLE sale_mast PARTITION BY RANGE (year(bill_date)*100+month(bill_date)) ( PARTITION p0 VALUES LESS THAN ((201304)), PARTITION p1 VALUES LESS THAN ((201307)), PARTITION p2 VALUES LESS THAN ((201310)), PARTITION p3 VALUES LESS THAN ((201401)));

查看分区后的信息:

mysql> select partition_name,table_rows from information_schema.partitions where table_name=‘sale_mast‘;+----------------+------------+
| partition_name | table_rows |
+----------------+------------+
| p0 | 4 |
| p1 | 3 |
| p2 | 2 |
| p3 | 0 |
+----------------+------------+
4 rows in set (0.01 sec)

第二种分区:然后对sale_mast 进行按天分区:

删除表,重新新建表和inset into后,进行按天分区:

ALTER TABLE sale_mast PARTITION BY RANGE (to_days(bill_date)) ( PARTITION p0 VALUES LESS THAN (to_days(‘2013-04-01‘)), PARTITION p1 VALUES LESS THAN (to_days(‘2013-07-01‘)), PARTITION p2 VALUES LESS THAN (to_days(‘2013-10-01‘)), PARTITION p3 VALUES LESS THAN (to_days(‘2014-01-01‘)));

mysql> select partition_name,table_rows from information_schema.partitions where table_name=‘sale_mast‘;+----------------+------------+
| partition_name | table_rows |
+----------------+------------+
| p0 | 4 |
| p1 | 3 |
| p2 | 2 |
| p3 | 0 |
+----------------+------------+
4 rows in set (0.00 sec)。

还可以建立子分区,这个下次再更新。

时间: 2024-08-09 09:55:30

mysql partition(mysql range partition,对历史数据建分区)的相关文章

MySQL数据表range分区例子

某些行业数据量的增长速度极快,随着数据库中数据量的急速膨胀,数据库的插入和查询效率越来越低.此时,除了程序代码和查询语句外,还得在数据库的结构上做点更改:在一个主读辅写的数据库中,当数据表数据超过1000w行后,那查询效率真的很让人抓狂.就算早前建了索引,也很难满足用户对于系统查询效率的体验. 优化方案是分表或分区.至于分区的原理以及分区和分表的区别,搜索一下,都介绍的很详细,这里就不作冗余介绍.简单来讲,分表旨在提高数据库的并发能力,分区旨在优化磁盘的IO和数据的读写,所以采用什么方案,还得根

mysql Out of range value adjusted for column导致Warning(1265)Data truncated for column 'column_name' at row 1

今天下午,我们的一个开发来找我,说线上有个环境报了"Warning(1265)Data truncated for column 'column_name' at row 1",定义的字段长度decimal(32,4),实际的小数点有超过4位的,但是大部分的账户登录查询的时候都没有问题,已知的就一个账户进行查询的时候会出现这个问题,看数据没有什么特别异常的. 于是,过去协助排查,临时拷贝了个存储过程,还真蹊跷,查询其他数据都没有问题,但是一到这一条记录就报错,在update报错的语句前

【mysql】mysql分表和表分区详解

为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕.分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率. 什么是分表? 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件.这些子表可以分布在

CoroSync + Drbd + MySQL 实现MySQL的高可用集群

Corosync + DRBD + MySQL 构建高可用MySQL集群 节点规划: node1.huhu.com172.16.100.103 node2.huhu.com172.16.100.104 资源名称规划 资源名称:可以是除了空白字符外的任意ACSII码字符 DRBD设备:在双节点上,此DRBD设备文件,一般为/dev/drbdN,主设备号147 磁盘:在双方节点上,各自提供存储设备 网络配置:双方数据同步所使用的网络属性 DRBD从Linux内核2.6.33起已经整合进内核 1.配置

Linux HA集群之Corosync + Pacemaker + DRBD + MySQL实现MySQL高可用

大纲 一.系统环境及所需软件包 二.高可用环境准备工作 三.DRBD的安装与基本配置 四.Corosync的安装与基本配置 五.基于crm配置资源 一.系统环境及所需软件包 系统环境 CentOS5.8 x86_64 node1.network.com    node1    172.16.1.101 node2.network.com    node2    172.16.1.105 软件包 corosync-1.2.7-1.1.el5.x86_64.rpm pacemaker-1.0.12-

Corosync+Pacemaker+DRBD+MySQL 实现MySQL高可用

一:Corosync+Pacemaker Pacemaker是最流行的CRM(集群资源管理器),是从heartbeat v3中独立出来的资源管理器,同时Corosync+Pacemaker是最流行的高可用集群的套件. 二:DRBD DRBD (Distributed Replicated Block Device,分布式复制块设备)是由内核模块和相关脚本而构成,用以构建高可用性的集群.其实现方式是通过网络来镜像整个设备.你可以把它看作是一种网络RAID1. 三:试验拓扑图 四:试验环境准备(ce

corosync+pacemaker+drbd+mysql实现mysql高可用

#################################################################                       服务器架构                         ##    ############################################################服务器:vm_test1:        网卡: eth0 192.168.1.213 用于外网通信        网卡: eth1

mysql启动时报错:Starting MySQL... ERROR! The server quit without updating PID file (/opt/mysql/data/mysql.pid) 的解决方法

出现问题的可能性 1.可能是/opt/mysql/data/数据目录mysql用户没有权限(修改数据目录的权限) 解决方法 :给予权限,执行  "chown -R mysql.mysql /opt/mysql/data"  然后重新启动mysqld 2.可能进程里已经存在mysql进程 解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9  进程号”杀死,然后重新启动mysqld! 3.可能是第二次在机器上安装mysql,有残余

mysql初学,mysql修改,mysql查找,mysql删除,mysql基本命令

Mysql 下载地址https://dev.mysql.com/downloads/mysql/ 1.连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码. 如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,M