这一段时间对数据库优化方面的认识深有体会,就以MySQL为例测试一下分区表的性能

MySQL5.0好像不支持分区,我用的5.5版本,测试是否支持可通过以下方法:

SHOW VARIABLES LIKE '%partition%';

如果结果为yes则说明支持,如下图:

创建表

不分区的表:

CREATE TABLE no_part_tab

(id INT DEFAULT NULL,

remark VARCHAR(50) DEFAULT NULL,

d_date DATE DEFAULT NULL

)ENGINE=MYISAM

分区表:

CREATE TABLE part_tab

(id INT DEFAULT NULL,

remark VARCHAR(50) DEFAULT NULL,

d_date DATE DEFAULT NULL

)ENGINE=MYISAM

PARTITION BY RANGE(YEAR(d_date))(

PARTITION p0 VALUES LESS THAN(1995),

PARTITION p1 VALUES LESS THAN(1996),

PARTITION p2 VALUES LESS THAN(1997),

PARTITION p3 VALUES LESS THAN(1998),

PARTITION p4 VALUES LESS THAN(1999),

PARTITION p5 VALUES LESS THAN(2000),

PARTITION p6 VALUES LESS THAN(2001),

PARTITION p7 VALUES LESS THAN(2002),

PARTITION p8 VALUES LESS THAN(2003),

PARTITION p9 VALUES LESS THAN(2004),

PARTITION p10 VALUES LESS THAN maxvalue);

插入数据

MySQL没有像oracle那样的序列,所以要用循环插入,每张表插入800w数据做测试

插入未分区表:

DROP PROCEDURE IF EXISTS no_load_part;

DELIMITER//

CREATE PROCEDURE no_load_part()

BEGIN

DECLARE i INT;

SET i =1;

WHILE i<8000001

DO

INSERT INTO no_part_tab VALUES(i,'no',ADDDATE('1995-01-01',(RAND(i)*36520) MOD 3652));

SET i=i+1;

END WHILE;

END//

DELIMITER ;

CALL no_load_part;

插入分区表:

DROP PROCEDURE IF EXISTS load_part;

DELIMITER&&

CREATE PROCEDURE load_part()

BEGIN

DECLARE i INT;

SET i=1;

WHILE i<8000001

DO

INSERT INTO part_tab VALUES(i,'partition',ADDDATE('1995-01-01',(RAND(i)*36520) MOD 3652));

SET i=i+1;

END WHILE;

END&&

DELIMITER ;

CALL load_part;

说明:首先删除procedure,如果已存在的话,然后开始创建新的,delimiter是指定分隔符,默认的是“;”,这里我们不能用分号,就指定为“//”或者“&&”,创建时定义个int类型i,然后通过do…while循环,等程序执行完毕后把分隔符重新指定为“;”,然后通过call语句写入数据库

测试效率

测试sql:

SELECT COUNT(*) FROM no_part_tab WHERE d_date > DATE '1995-01-01' AND d_date< DATE '1995-12-31';

SELECT COUNT(*) FROM part_tab WHERE d_date > DATE '1995-01-01' AND d_date< DATE '1995-12-31';

测试结果:

第一次查询的结果对比。不分区是10.90秒,分区是0.28秒,可以看出分区效率提高了约97%,第一次查询速度慢,当多查询几次效率一般会提高,我也试了试,下面是结果:

如图可以看出,多查询几次后,不分区的表稳定在2.17秒左右,分区表一直在0.28秒左右,分区的效率依然相比提高约87%,分区效果相当显著

测试数据库相对简单,当数据复杂并且外键多时时,MySQL处理近千万的数据的表时效率是不太好的,这是分区就会显得特别的重要

总结

测试过程中需要了解的注意点:

创建表时采用的是myisam类型,除了myisam存储引擎之外还有InnoDB、MEMORY、MERGE等,具体区别我不详述了,我就简单说一下,myisam性能相对来说好点,但不支持事务,另外是二进制,可以windows直接拷贝到linux,InnoDB支持事务等操作,其它存储引擎下的情况我没有测试,有兴趣的可以试试

MySQL分区方法有多种,除去本次使用的range分区外还有list分区、hash分区、key分区和子分区,另外几种分区方法有兴趣的可以尝试一下

mysql 分区 效率_【MySQL】MySQL分区表效率测试对比相关推荐

  1. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  2. mysql varchar 效率_由MySQL中char和varchar效率想到的

    对比char和varchar随便在google或百度中搜一下得到的结论大概都是"char定长,varchar不定长,char要比varchar占用更多的空间,由于定长char的效率高于var ...

  3. php pdo 与对比mysql,php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例...

    php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例 本文实例讲述了php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率.分享给大家供大家参考,具体如下: ...

  4. mysql分区并行执行_关于MySQL8.0 InnoDB并行执行的详解

    概述 MySQL经过多年的发展已然成为最流行的数据库,广泛用于互联网行业,并逐步向各个传统行业渗透.之所以流行,一方面是其优秀的高并发事务处理的能力,另一方面也得益于MySQL丰富的生态.MySQL在 ...

  5. mysql数据库管理维护_深入浅出MySQL 数据库开发 优化与管理维护 第3版

    资料目录: 第 一部分 基础篇 第 1章 MySQL的安装与配置 2 1.1 MySQL的下载 2 1.1.1 在Windows平台下下载MySQL 3 1.1.2 在Linux平台下下载MySQL ...

  6. mysql解析运行时间_分析 MySQL 语句运行时间

    为了验证select 1 与 select 1 from tableName 与 select * from tableName的执行效率,需要测试一下各自执行的时间.于是总结一下,查看mysql语句 ...

  7. linux mysql依赖关系_[Linux]-MySQL主从复制

    MySQL支持的复制类型: 1) 基于语句的复制.在主服务器上执行的SQL语句,在从服务器上执行同样的语句.MySQL默认采用基于语句的复制,效率比较高: 2) 基于行的复制.把改变的内容复制过去,而 ...

  8. mysql多大_洞悉MySQL底层架构:游走在缓冲与磁盘之间

    提起MySQL,其实网上已经有一大把教程了,为什么我还要写这篇文章呢,大概是因为网上很多网站都是比较零散,而且描述不够直观,不能系统对MySQL相关知识有一个系统的学习,导致不能形成知识体系.为此我撰 ...

  9. mysql 锁设置密码_[转载]mysql锁小结

    Record Lock 总是会去锁住索引记录,如果innodb存储引擎表在建立的时候没有设置任何一个索引,而且查询的时候没有使用到索引,那么这时就会导致表锁. Next-Key Lock是结合了Gap ...

  10. mysql amp;amp;_浅析mysql交互式连接amp;非交互式连接

    交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议. 非交互式操作:就是你在你的项目中进行程序调用.比如一边是tom ...

最新文章

  1. js关于正则的前后关联约束(前后预查)
  2. 从一道常见习题的自然延伸谈起
  3. 高中数学?_JAVA
  4. OpenCv霍夫变换与RANSAC检测圆形
  5. Android—Retrofit解析
  6. 构建安全网络 比格云全系云产品30天内5折购
  7. AKKA 笔记 - 有限状态机 -2
  8. java为什么用工厂模式_为什么用简单工厂模式,而不是直接实例化对象
  9. 图像傅里叶变换的幅度谱、相位谱以及双谱重构原图像
  10. 6大理由告诉你为什么这次区块链大会必须参加
  11. vmxnet3 丢包处理
  12. 矩阵键盘消抖 c语言,按键消抖,矩阵键盘原理和矩阵键盘的仿真模型
  13. 个人作品 轻航 - 社区商城系统
  14. 遇到问题--python-- pandas--常见问题积累
  15. mysql事务转账_模拟数据库事务实现转账
  16. 转载 VS简体中文版
  17. 【历史上的今天】2 月 24 日:乔布斯生日;苹果推出 Thunderbolt 接口;WhatsApp 创始人诞生
  18. 哈希表-数据结构(C语言)
  19. DPDK官方文档说明
  20. TMS320F28335项目开发记录10_28335之SCI模块

热门文章

  1. Oracle协议适配器错误解决办法
  2. 属性动画+购物车+下订单
  3. Android消息推送:第三方消息推送平台详细解析
  4. 聪明的人都有这些思维格局
  5. Kali 更新源(国内镜像)
  6. 头像上传html js版,点击上传头像预览
  7. Tomcat 自动部署
  8. 准时化生产方式的技术(zt)
  9. 揭密玄学奥秘(一):风水, 姓名八字其实都是科学...
  10. android 媒体查询,CSS常用媒体查询应用