软硬件环境

Intel 酷睿i5 480M,2.66GHz(笔记本)
5400转硬盘
6G内存
Win10 64 位操作系统
PHP version: 7.0.6
Server version: 5.7.10 - MySQL Community Server (GPL)

PDO事务占位符批量导入上亿大数据测试代码演示案例

<?php
function transaction(&$sql, &$paramArray){static $connect = null;if (!isset($connect)) {$connect = new PDO("mysql:dbname=test;host=127.0.0.1;port=3306;charset=utf8", 'root', '123456');}$connect->beginTransaction();$sth = $connect->prepare($sql);foreach ($paramArray as $param) {$sth->execute($param);}$connect->commit();
}$t = microtime(true);$paramArray = [];
$sql = 'INSERT INTO `b` VALUES (NULL,?,?,?,?,?,?,?,?,?)';for ($i = 1; $i <= 1000000000; $i ++) {//10亿$paramArray[] = [$i, $i, $i, $i, $i, $i, $i, $i, $i];if ($i % 1000000 === 0) {//100万transaction($sql, $paramArray);$paramArray = [];}
}if ($paramArray) {transaction($sql, $paramArray);$paramArray = [];
}var_dump((microtime(true)-$t),'ok');

3亿条理想字段类型记录下的InnoDB COUNT性能

https://yunpan.cn/cRIszrtnuuUjf  访问密码 91ff

CREATE TABLE `a` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`a1` int(10) unsigned NOT NULL,`a2` int(10) unsigned NOT NULL,`a3` int(10) unsigned NOT NULL,`a4` int(10) unsigned NOT NULL,`a5` int(10) unsigned NOT NULL,`a6` int(10) unsigned NOT NULL,`a7` int(10) unsigned NOT NULL,`a8` int(10) unsigned NOT NULL,`a9` int(10) unsigned NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=300000001 DEFAULT CHARSET=utf8mysql> select count(*) from a;
+-----------+
| count(*)  |
+-----------+
| 300000000 |
+-----------+
1 row in set (5 min 54.45 sec)InformationTable comments:
Space usage
Data    16.2    GiB
Index   0   B
Total   16.2    GiB
Row statistics
Format          dynamic
Collation   utf8_general_ci
Next autoindex  300,000,001
Creation    Jun 03, 2016 at 09:26 PM

10亿条理想字段类型记录下的InnoDB COUNT性能

https://yunpan.cn/cBsw5KibNW6Cz  访问密码 621f

CREATE TABLE `b` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`b1` int(10) unsigned NOT NULL,`b2` int(10) unsigned NOT NULL,`b3` int(10) unsigned NOT NULL,`b4` int(10) unsigned NOT NULL,`b5` int(10) unsigned NOT NULL,`b6` int(10) unsigned NOT NULL,`b7` int(10) unsigned NOT NULL,`b8` int(10) unsigned NOT NULL,`b9` int(10) unsigned NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000000001 DEFAULT CHARSET=utf8mysql> select count(*) from b;
+------------+
| count(*)   |
+------------+
| 1000000000 |
+------------+
1 row in set (22 min 42.38 sec)InformationTable comments:
Space usage
Data    61.1    GiB
Index   0   B
Total   61.1    GiB
Row statistics
Format          dynamic
Collation   utf8_general_ci
Next autoindex  1,000,000,001
Creation    Jun 19, 2016 at 10:43 PM
Last update     Jun 19, 2016 at 10:25 PM

10万条常规字段类型记录下的InnoDB COUNT性能

https://yunpan.cn/cR476XS6dDf2S  访问密码 eaac

CREATE TABLE `c` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`c9` tinyint(3) unsigned NOT NULL,`c8` datetime NOT NULL,`c7` datetime NOT NULL,`c1` varchar(32) NOT NULL,`c2` varchar(64) NOT NULL,`c3` varchar(128) NOT NULL,`c4` varchar(255) NOT NULL,`c5` text NOT NULL,`c6` text NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mysql> select count(*) from c;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (1 min 24.18 sec)InformationTable comments:
Space usage
Data    8.3     GiB
Index   0   B
Total   8.3     GiB
Row statistics
Format          dynamic
Collation   utf8_general_ci
Next autoindex  100,001
Creation    Jun 08, 2016 at 09:13 PM
Last update     Jun 19, 2016 at 08:10 PM

按照主键随机SELECT *

mysql> select * from a where id in (10,3431,56432,543523,65,43432,43546565,32234343,123456789);
+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
| id        | a1        | a2        | a3        | a4        | a5        | a6        | a7        | a8        | a9        |
+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
|        10 |        10 |        10 |        10 |        10 |        10 |        10 |        10 |        10 |        10 |
|        65 |        65 |        65 |        65 |        65 |        65 |        65 |        65 |        65 |        65 |
|      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |
|     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |
|     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |
|    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |
|  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |
|  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |
| 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 |
+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
9 rows in set (0.45 sec)mysql> select * from b where id in (10,3431,56432,543523,65,43432,43546565,32234343,123456789);
+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
| id        | b1        | b2        | b3        | b4        | b5        | b6        | b7        | b8        | b9        |
+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
|        10 |        10 |        10 |        10 |        10 |        10 |        10 |        10 |        10 |        10 |
|        65 |        65 |        65 |        65 |        65 |        65 |        65 |        65 |        65 |        65 |
|      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |      3431 |
|     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |     43432 |
|     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |     56432 |
|    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |    543523 |
|  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |  32234343 |
|  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |  43546565 |
| 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 | 123456789 |
+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
9 rows in set (0.20 sec)mysql> select id from c where id in (10,3431,56432,543523,65,43432,43546565,32234343,123456789);
+-------+
| id    |
+-------+
|    10 |
|    65 |
|  3431 |
| 43432 |
| 56432 |
+-------+
5 rows in set (0.00 sec)

MAX函数性能

mysql> select max(id) from a;
+-----------+
| max(id)   |
+-----------+
| 300000000 |
+-----------+
1 row in set (0.34 sec)mysql> select max(id) from b;
+------------+
| max(id)    |
+------------+
| 1000000000 |
+------------+
1 row in set (0.35 sec)mysql> select max(id) from c;
+---------+
| max(id) |
+---------+
|  100000 |
+---------+
1 row in set (0.00 sec)

其他性能指标

mysql> ALTER TABLE `test` ENGINE = INNODB;
Query OK, 100000000 rows affected (6 hours 8 min 6.96 sec)
Records: 100000000  Duplicates: 0  Warnings: 0ARCHIVE
Index   0B,Data 2    G
mysql> mysql> select max(id) from test;
+-----------+
| max(id)   |
+-----------+
| 100000000 |
+-----------+
1 row in set (5 min 5.13 sec)
mysql> select id from test order by id desc limit 1;
+-----------+
| id        |
+-----------+
| 100000000 |
+-----------+
1 row in set (5 min 2.89 sec)InnoDB
Index   0B,Data 93.6 GiB
mysql> select max(id) from test;
+-----------+
| max(id)   |
+-----------+
| 100000000 |
+-----------+
1 row in set (0.00 sec)
mysql> select id from test order by id desc limit 1;
+-----------+
| id        |
+-----------+
| 100000000 |
+-----------+
1 row in set (0.00 sec)

启发

1.上面一切的一切悲观测试结果,增加硬件配置,会带来立竿见影的性能提升!

也许有的同学会提出分库、分表、分区、拆字段、上缓存、上搜索引擎、上大数据分析....但是这些执行完毕后,项目代码也要配套更新,紧接着是测试、安全、并发等等问题亟待解决(目前团队稳定么?有这些真实力么?技术成本提高后紧接着带来的是招聘成本和维护成本).....

一个高级工程师的月薪应该差不多够改善硬件了吧?不够?那么整个研发部门的月薪呢?项目稳定性带来的业务市场直接价值和潜在价值呢?

2.当数据量很庞大的时候,尽量避免COUNT等操作!

一定要的话也可以选择计算粗略值

select TABLE_ROWS from information_schema.`TABLES` WHERE TABLE_NAME = '表名';
explain select count(*) from c where id > 0;

或者获取是否含有下一页、上一页

http://php.net/manual/zh/pdostatement.fetch.php

3.Mysql按照主键ID随机查询真的很快,存储10亿都没有问题!

如果首先已经通过某个方式获得了某些主键ID记录,最后通过Mysql直接 ID IN(...)岂不很快?

这时候选择Sphinx搜索引擎进行筛选查找操作,最终获得上述ID数据是个明智的选择,如果你安装了Mysql Sphinx 扩展,那么还可以把 Sphinx 表当作常规表与真实的Mysql表进行LEFT Join,利用 Sphinx 排查复杂业务逻辑,Mysql吐数据,妙哉!

4.建立字段时候谨慎的选择字段类型、表中存储哪些字段直接关系到你的系统负载!

设计数据库时我们一般会把常用、短类型字段放在主表(尽量打造成静态表),把常用、类型字段放在附表,最终2个或者多个表进行JOIN,附表中适当的维护使用冗余字段,也是不错的选择!

转载于:https://my.oschina.net/u/3066868/blog/1545851

Mysql5.7在上亿级别的存储性能测试报告 Mysql到底可不可以支持单表过亿?要分区么?分表?...相关推荐

  1. v380云存储如何查询_使用 JuiceFS 在云上优化 Kylin 的存储性能

    Apache Kylin 4.0 采用 Spark 作为构建引擎以及 Parquet 作为存储,让云上部署和伸缩变得更容易,然而使用云上的对象存储相较于使用本地磁盘的 HDFS,可能存在部分兼容性和性 ...

  2. 高并发系列:存储优化之也许可能是史上最详尽的分库分表文章之一

    趣味性不强,但知识性很强,建议耐心看或者先收藏 本文内容预览: 库表会在哪天到达瓶颈? 1.1 苏宁拼购百万级库表拆分之前 1.2 京东配运平台库表拆分之前 1.3 大众点评订单库拆分之前 1.4 小 ...

  3. 这下真麻了!亿级别大表拆分心路历程!

    文章来源:https://c1n.cn/dPgm1 前言 笔者是在两年前接手公司的财务系统的开发和维护工作.在系统移交的初期,笔者和团队就发现,系统内有一张 5000W+ 的大表. 跟踪代码发现,该表 ...

  4. 万亿级企业MySQL海量存储分库分表设计实践

    互联网业务往往使用MySQL数据库作为后台存储,存储引擎使用InnoDB.我们针对互联网自身业务特点及MySQL数据库特性,讲述在具体业务场景中如何设计表和分表.本文从介绍MySQL相关基础架构设计入 ...

  5. [NewLife.XCode]分表分库(百亿级大数据存储)

    NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量 ...

  6. 史上更全面的数据库分库分表、数据一致性、主键分配思路!

    作者:butterfly100 cnblogs.com/butterfly100/p/9034281.html 一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有 ...

  7. 去分库分表的亿级数据NewSQL实践之旅

    http://dbaplus.cn/news-11-1931-1.html 背景 2017 年初,公司用户中心体系面临迭代和重构,当时数据库有数亿多的核心数据通过 HashKey 分为了 1024 张 ...

  8. MySQL高性能:索引、锁、事务、分库分表如何撑起亿级数据

    最近项目增加,缺人手,面试不少,但匹配的人少的可怜.跟其他组的面试官聊,他也抱怨了一番,说候选人有点儿花拳绣腿,回答问题不落地,拿面试最常问的MySQL来说,并不只是懂"增删改查" ...

  9. 亿级流量网站架构核心技术之“数据库分库分表策略”

    本文节选自<亿级流量网站架构核心技术--跟开涛学搭建高可用高并发系统>一书 张开涛 著 电子工业出版社出版 小编会从留言中选择获赞最多的前五名用户免费送出此书哦!规则见文末. 数据库分库分 ...

最新文章

  1. Java基本数据类型转换|字符和字符串
  2. Linux下使用service启动jar包.md
  3. 我是非计算机专业学生,非计算机专业学生怎么走上计算机技术之路?
  4. 【深度学习】Panoptic FCN:真正End-to-End的全景分割
  5. 2.5.2 MySQL二进制日志介绍
  6. 常见Java面试题 Files的常用方法都有哪些?
  7. 如何隐藏 video 元素的下载按钮
  8. matlab读取xlsx文件,从电子表格读取数据
  9. 数据安全:1.98亿购车者的购车记录公之于众
  10. 高速交警的救命忠告!常跑高速的一定要看!
  11. 数据之路- 中国五城市PM2.5数据解读
  12. cisco路由器交换机忘记密码后的恢复
  13. 屏下指纹技术实现方案与原理
  14. 距阵乘以一个未知距阵得单位矩阵 怎么算_一个人可以 DIY 出什么高逼格的东西?...
  15. 删除群晖NAS回收站中的临时文件
  16. 最高每人4万元!多地出台重磅就业补贴政策
  17. 淘宝店铺订单解密接口/淘宝店铺订单插旗接口/淘宝店铺订单交易接口/淘宝店铺商品上传接口/淘宝店铺订单明文接口/代码对接分享
  18. 【知识图谱】03图谱设计(使用Protege)
  19. 【JavaScript】条件运算符也称‘三元运算符‘的介绍与使用
  20. 达内2020年课程资料大全

热门文章

  1. web 计算器_计算器中的奢侈品——CASIO S200
  2. Python Web开发:Django+BootStrap实现简单的博客项目
  3. H5页面投票怎么制作
  4. 怎样删除计算机中的来宾用户密码,win7怎么删除来宾账户_win7如何删除来宾账户...
  5. 控制计算机桌面图标,(1)在桌面上显示“计算机”“控制面板”图标,然后隐藏“控制面板”图标。...
  6. ipad投影到mac上_如何停止Mac和iPad上的来电
  7. 吴恩达机器学习15-异常检测
  8. css计时动画,纯CSS实现倒计时动画
  9. m3u8下载合并图片文件(但实际上还是ts文件)
  10. 裸金属服务器跟云服务器区别有哪些?裸金属应用在哪些场景中?