这一段时间对数据库优化方面的认识深有体会,就以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. linux vnc 屏幕大小,Linux系统下vnc 的配置和使用方法
  2. python学习手册条件-Python学习手册(第4版)pdf
  3. 边缘计算大热 AI芯片站上风口
  4. omnigraffle 的一些总结
  5. linux cp 目录不存在自动创建,Linux运维知识之Linux:复制并创建目标目录,如果它不存在...
  6. 优雅的避免空指针的示例
  7. 有符号数与无符号数间的转换
  8. 耶路撒冷三千年(笔记)
  9. bus Hound使用详解
  10. 《动手学深度学习》Task06-3:词嵌入进阶
  11. ORACLE创建物化视图(on commit\on demand)
  12. 可通过qq聊天机器人拿下服务器权限
  13. PC微信自动保存朋友圈图片
  14. matlab读取excel数据
  15. 写给Java 工程师们一封信
  16. python数据评估
  17. 视频教程-Oracle数据库从入门到实用教程详解-Oracle
  18. 五种最怪异的木马病毒:滑稽、吓人又有些奇怪
  19. 2022年12月1日起,OCS将停止接受GOTS的原料投入
  20. Unity3D:maya素材导入unity(动画)

热门文章

  1. 集丰照明|中国 LED 产业情况和市场发展如何?
  2. 学习 GitHub 对我们有什么好处?
  3. why哥被阿里一道基础面试题给干懵了,一气之下写出万字长文。
  4. 第四章 Http协议详解
  5. 08 ArcGIS JS API 4.15实现萤火虫效果
  6. r语言写内曼最优分配_R中最优化函数optim
  7. 【java高性能编程基础】- java中线程的六种状态,线程状态变化的几种类型
  8. node.js实现注册和登录
  9. Windows xp sp2详细安装过程详解
  10. BeyondCompare3密钥过期处理