某些行业数据量的增长速度极快,随着数据库中数据量的急速膨胀,数据库的插入和查询效率越来越低。此时,除了程序代码和查询语句外,还得在数据库的结构上做点更改;在一个主读辅写的数据库中,当数据表数据超过1000w行后,那查询效率真的很让人抓狂。就算早前建了索引,也很难满足用户对于系统查询效率的体验。

优化方案是分表或分区。至于分区的原理以及分区和分表的区别,搜索一下,都介绍的很详细,这里就不作冗余介绍。简单来讲,分表旨在提高数据库的并发能力,分区旨在优化磁盘的IO和数据的读写,所以采用什么方案,还得根据业务再作斟酌。由于我们的系统对并发要求不高,所以便采用了分区。

分区是MySQL5.1以后实现的。其中分区类型有RANGE分区、LIST分区、HASH分区、KEY分区。我们这里是使用RANGE分区来讲解。

分区需要注意的一点是:要么不定义主键,要么把分区字段添加到主键中。并且分区字段不能为NULL,要不然就难以确定分区范围。所以要设为NOT NULL。

首先执行一下show plugins; 查看partition这一栏是否为ACTIVE,是则表示数据库支持分区。

1、创建一个数据表并分区:

CREATE TABLE ` table_name` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`uid` VARCHAR(50) DEFAULT NULL,

`action` VARCHAR(10) DEFAULT NULL,

` channel` VARCHAR(20) DEFAULT NULL,

`count_left` INT(11) DEFAULT NULL,

`end_time` INT(11) DEFAULT '0',

PRIMARY KEY (`id`,`end_time`),

KEY `time` (`end_time`)

) ENGINE=MYISAM DEFAULT CHARSET=utf8

PARTITION BY RANGE(`end_time`) (

PARTITION p161130 VALUES LESS THAN (1480550399),

PARTITION p161231 VALUES LESS THAN (1483228799),

PARTITION p170131 VALUES LESS THAN (1485907199),

PARTITION p170228 VALUES LESS THAN (1488326399),

PARTITION p170331 VALUES LESS THAN (1491004799),

PARTITION p170430 VALUES LESS THAN (1493596799),

PARTITION p170531 VALUES LESS THAN (1496275199),

PARTITION p170631 VALUES LESS THAN (1498867199),

PARTITION pnow VALUES LESS THAN MAXVALUE

);

2、修改一个数据表分区:

ALTER TABLE `table_name`

PARTITION BY RANGE(`end_time`) (

PARTITION p161130 VALUES LESS THAN (1480550399),

PARTITION p161231 VALUES LESS THAN (1483228799),

PARTITION p170131 VALUES LESS THAN (1485907199),

PARTITION p170228 VALUES LESS THAN (1488326399),

PARTITION p170331 VALUES LESS THAN (1491004799),

PARTITION p170430 VALUES LESS THAN (1493596799),

PARTITION p170531 VALUES LESS THAN (1496275199),

PARTITION p170631 VALUES LESS THAN (1498867199),

PARTITION pnow VALUES LESS THAN MAXVALUE

);

说明:1、2中使用end_time (时间是以时间戳的形式记录的) 作为分区字段对表进行分区。分区的区分值为分区名中的时间的时间戳形式,比如2016/11/30 23:59:59 转为秒数为1480550399。以上的代码中,我将数据表分为9个区,从16年11月30日到17年06月31日 共8个区加上pnow这个区存放17年6月31日以后的数据;如上所示,16年11月30日以前的数据,将会存放在p161130这个分区中16年12月01日至16年12月31日的数据将会存放在p161231分区中,以此类推…

分区后可以执行以下语句查看效果(后面也可以用该语句查看每个分区中有多少数据):

SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'table_name';

3、删除一个分区:

执行语句:ALTER TABLE table_name DROP PARTITION p_name;

注意:删除一个分区时,该分区内的所有数据也都会被删除;

如果用这样来删除数据,要比用delete from table_name where …要有效得多;

4、新增一个分区:

执行语句:ALTER TABLE table_name ADD PARTITION (PARTITION p_name VALUES LESS THAN (xxxxxxxxx));

注意:如果原先最后一个分区是PARTITION pnow VALUES LESS THAN MAXVALUE; 那么应该先删除该分区,然后在执行新增分区语句,然后再新增回该分区;

mysql range代表什么意思_MySQL数据表range分区例子相关推荐

  1. mysql 目录武沛齐_MySQL数据表中的数据操作

    1.插入数据 insert into t_user (username,password,nickname) values ('foye','123','佛爷'); 以下方式必须写出所有的字段 ins ...

  2. mysql 命令执行drop 命令_(笔记)Mysql命令drop table:删除数据表

    drop table命令用于删除数据表. drop table命令格式:drop table ; 例如,删除表名为 MyClass 的表: mysql> drop table MyClass; ...

  3. MYSQL数据库(九)- 修改数据表名称、列名称

    目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...

  4. MySQL学习笔记-约束以及修改数据表

    MySQL学习笔记-约束以及修改数据表 约束: 按功能划为: NOT NULL , PRIMARY KEY , UNIQUE KEY , DEFAULT , FOREIGN KEY 按数据列的数目划为 ...

  5. MySQL学习第二天—操作数据库\数据表命令

    文章目录 一.登录数据库 二.基本数据库操作命令 1. 操作数据库 1.1 创建数据库 1.2 删除数据库 1.3 查看数据库 1.4 使用数据库 1.5 其他操作 2.操作数据表 2.1 创建数据表 ...

  6. MySQL学习总结(2) --- 数据表管理(增删改查)、使用DQL查询数据(SELECT)

    MySQL学习总结(2) - 数据表管理(增删改查).使用DQL查询数据(SELECT) 1. 数据管理(增删改查) 数据库数据管理方法: a.通过SQLyog等管理工具管理数据库数据 b. 通过DM ...

  7. mysql表中字段数据类型_mysql数据表中字段的数据类型有哪些?

    数据表中字段的数据类型有:TINYINT.SMALLINT.MEDIUMINT.INT.INTEGE.DATETIME.DATE.TIMESTAMP.TIME.YEAR.CHAR.VARCHAR.TE ...

  8. mysql range代表什么意思_MYSQL explain详解之range

    explain显示了MySQL如何使用索引来处理DML语句以及连接表,explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句 2.EXPLAIN列的解释: table:显示这一行的数据是 ...

  9. mysql取出数据外键_mysql数据表有外键,应注意的几点(目前学习所获得的经验)...

    mysql : 1.有做外键的表子表和父表的引擎要一致才能添加数据:否则报外键约束错误 2.数据 类型要一致,不然添加补了 外键: 3.InnoDB和 myisam的区别(来源:PHP100中文网) ...

最新文章

  1. 开发日记-20190523 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  2. Deep Learning for Computer Vision with MATLAB and cuDNN
  3. STEMA 考试每日一练 2020.12.7 - 2021.11.30 试题及答案 - 刷题
  4. ML之PLiR之LARS:利用LARS算法求解ElasticNet回归类型(包括类别编码+属性重要程度排序)问题(实数值年龄预测)
  5. pycharm如何改为中文显示?
  6. 静态分配内存和动态分配内存
  7. 这可能是史上最全 Redis 高可用解决方案总结
  8. python退出函数_【转】python 退出程序的方式
  9. MSDN下载的win7 32位原版镜像无法安装vmtools和提示安装程序无法自动安装Virtual Machine Communication Interface(VMCI)驱动程序
  10. java batik svg_java使用batik转换svg文件
  11. 2.1.5、会员权限管理系统应用
  12. JS打开新的页面(当前页面打开、新的页面打开)
  13. 计算机蓝屏了 怎么维修,电脑蓝屏怎么办?电脑出现蓝屏快速解决教程
  14. python怎么撤销_python撤销操作
  15. KGB成功破解特朗普的秘密消息
  16. dvdscr是什么意思?什么是dvdscr格式?
  17. 信息孤岛影响_解读制造业信息化转型的11大关键点!
  18. python这个语言值得学吗_python和java哪个更值得学
  19. 【读书笔记】《牧羊少年奇幻之旅》
  20. 2020-8-18js练习

热门文章

  1. openMP的简单使用
  2. c++全局类对象_C++ 类在内存中的存储方式(一)
  3. mysql先删后增并发时出现死锁_MySQL死锁案例分析一(先delete,再insert,导致死锁)...
  4. PID控制器改进笔记之三:改进PID控制器之正反作用
  5. OpenJTAG调试S3C2440裸板程序
  6. 证书体系: PFX 文件格式解析
  7. [设计模式] ------ 装饰模式
  8. 找第一个只出现一次的字符_剑指offer 字符流中第一个只出现一次的字符
  9. bootstraptable查看详情_bootstrap-table前端实现多条件时间段查询数据
  10. 网页挂码方式html css,CSS代码 解决网页挂马问题