很多粉丝问我:MySQL到底能支撑多少数据,是不是500万以上就不行了,查询就非常慢了?

这个问题问得好。到底行不行呢?

我觉得还是得通过实验来见证一下,mysql面对百万、千万、亿级别的数据时,查询到底行不行???

1亿数据查询速度

创建表test1

test1表,结构比较简单,2个字段,都有索引。

DROP TABLE IF EXISTS test1;
CREATE TABLE test1(id int PRIMARY KEY COMMENT '编号' auto_increment,order_num bigint comment '订单号'
)COMMENT '用户表';
/*order_num分别加索引*/
create index idx1 on test1(order_num);

插入1亿数据

@Test
public void test1() throws SQLException, ClassNotFoundException {Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb?characterEncoding=UTF-8","root","密码");StringBuilder sql = new StringBuilder("insert into test1(order_num) values ");for (int i = 1; i <= 100000000; i++) {sql.append(String.format("(%s),", i));if (i % 10000 == 0) {String s = sql.substring(0, sql.length() - 1);sql = new StringBuilder("insert into test1(order_num) values ");PreparedStatement ps = connection.prepareStatement(s);ps.executeUpdate();System.out.println(System.currentTimeMillis() + ":" + i);}}
}

无条件查询(耗时24秒)

耗时20多秒,如果给用户用,这个肯定是无法接受的。

mysql> select count(*) from test1;
+-----------+
| count(*)  |
+-----------+
| 100000000 |
+-----------+
1 row in set (23.95 sec)

走索引查询(耗时1毫秒)

order_num 字段上面有索引,我们插入的时候,order_num 这个字段的值没有重复的。

用这个字段查询一下看看效果,耗时1毫秒,快不快,你们说???

select * from test1 where order_num = 9999999;

走索引,范围查询(耗时1毫秒)

select * from test1 where order_num >= 1000000 and order_num<= 1000010;

结论

  1. 不走索引,查询,这个基本上用不了,等着用户骂你吧。

  2. 走索引,毫秒级响应,1亿数据根本不是问题,即使是10亿数据,速度也差不多,大家可以试试。

再来个表,稍微复杂点

创建test2表

test2有3个字段,后面2个字段分别加了索引。

DROP TABLE IF EXISTS test2;
CREATE TABLE test2(id int PRIMARY KEY COMMENT '编号' auto_increment,user_id bigint comment '用户id',order_num bigint comment '订单号'
)COMMENT '用户表';
/*user_id、order_num分别加索引*/
create index idx1 on test2(user_id);
create index idx2 on test2(order_num);

插入1亿数据

100万user_id,每个user_id下面关联100个order_num,共1亿数据

@Test
public void test2() throws SQLException, ClassNotFoundException {Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb?characterEncoding=UTF-8","root","密码");StringBuilder sql = new StringBuilder("insert into test2(user_id,order_num) values ");int count = 0;for (int user_id = 1; user_id <= 1000000; user_id++) {for (int num = 1; num <= 100; num++) {sql.append(String.format("(%s,%s),", user_id, count));count++;}if (count % 10000 == 0) {String s = sql.substring(0, sql.length() - 1);sql = new StringBuilder("insert into test2(user_id,order_num) values ");PreparedStatement ps = connection.prepareStatement(s);ps.executeUpdate();System.out.println(System.currentTimeMillis() + ":" + count);}}
}

无条件查询(耗时18秒)

mysql> select count(*) from test2;
+-----------+
| count(*)  |
+-----------+
| 100000000 |
+-----------+
1 row in set (18.36 sec)

查询某个用户的数据(耗时1毫秒)

select * from test2 where user_id = 100000;

查询出来了100条数据,耗时也就1毫秒。

上面测试效果都是在我们笔记本上面的测试效果,如果放在线上去跑,数据会更好看!

总结一下

  1. mysql面对亿级别的数据到底行不行呢?看看上面的数据,不用我说了吧

  2. mysql数据量上去之后,比如千万,亿级别,如果不走索引,去查询,这个肯定是用不成的,用户是无法接受的。

  3. mysql数据量大了,千万,亿级别,查询的时候,带上条件,并且条件必须得走索引,那么速度是飞快的,毫秒级别的。

面对亿级数据,MySQL硬的起来么?相关推荐

  1. 亿级数据mysql优化

    亿级数据优化 情况简介 用户分析系统以用户的心跳数据为依据,统计查询用户的各种情况.心跳数据很多,经过去重,去无效,数据量还是在2亿/月的水平.普通的查询在这个量级的数据库上根本查不出来,为此,分表分 ...

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

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

  3. Mysql数据库快速插入亿级数据

    Mysql数据库快速插入亿级数据 接手一个项目,该项目运行了两三年了.接手的时候,只有一个部署文档和全部代码,再没有其他文档了,也没有其他任何人了解这个项目.好吧,试着深入了解吧.代码在测试环境跑来了 ...

  4. 蚂蚁金服面对亿级并发场景的组件体系设计

    来自:蚂蚁金服公众号mPaas 作者:吕丹(凝睇),2011 年加入支付宝,先后负责了支付宝 Wap.alipass 卡券.SYNC 数据同步等项目,并参与了多次双十一.双十二.春节红包大促活动,在客 ...

  5. 阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了

    说在前面 在尼恩指导了几百个小伙伴的面试,在这些过程中, 非常.非常高频的一个面试题: 千万级数据,如何做性能优化? 亿级数据,如何做性能优化? 最近,有个小伙伴阿里二面,又遇到了这个问题. 其实,尼 ...

  6. 架构系列---蚂蚁金服面对亿级并发场景的组件体系设计

    今天,我主要想和大家分享一下移动领域基础组件体系,内容大致可以分为四大块,第一块是标准移动研发所需的基础服务体系,第二块是支撑亿级并发的核心组件"移动接入"的架构演进过程,第三块是 ...

  7. 亿级数据,秒级响应!看Smartbi如何助力经济普查,把脉时代经济!

    距离第一次经济普查工作已经整整 15 年,该项工作是我国经济发展进入 21 世纪进行的一项对重大国情国力的全面调查,是党中央国务院为正确认识国情,准确把握国力,科学制定国策而采取的一项重要举措. 然而 ...

  8. excel统计行数_百万到亿级数据,快速统计查询

    大家好,我是dk.这是Excel神器PowerQuery实战入门系列的第3篇.往后,我会更新更多关于PQ的相关内容,有兴趣的小伙伴可以关注下. 众所周知,Excel2003版最大行数是65536行,到 ...

  9. 【python 处理亿级数据】使用 Pandas 处理亿级数据

    此前有一篇文章<别老扯什么Hadoop了,你的数据根本不够大>指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择.事实确实如此,在数据分析领域,那么如何处理亿级数据呢 ...

最新文章

  1. YYAnimatedImageView--gif在ios14之后只能播放一次
  2. 窄带信号和宽带信号的区别和联系
  3. Kubernetes 系列(三):Kubernetes使用Traefik Ingress暴露服务
  4. 正则表达式收藏(四)之MySQL的正则
  5. 你真的以为你了解Java的序列化了吗
  6. 为什么数据库有时候不能定位阻塞(Blocker)源头的SQL语句
  7. Ubuntu 18.4 镜像
  8. LeetCode-260 Single Number III
  9. iOS及Android 启动页面(即欢迎页面),引导页面,及广告页面的加载
  10. 在react开发过程中由于setState的异步特性,获取最新state遇到问题
  11. c++ opencv4.5.0 头文件_简单的C程序分析(first.c程序)
  12. Windows 关于Robocopy的使用详解
  13. 【信号处理】信号与系统 电子课本(郑君里)
  14. c语言 电脑 控制串口,PC与单片机RS-232串口的通讯和控制
  15. junit5 入门系列教程-13-junit5 测试接口及默认方法
  16. 东南大学硕士毕业论文Latex 模版教程
  17. Python视频制作 MoviePy框架视频处理模块
  18. shell实现论坛灌水机
  19. 【Python3笔记】五、Python 字符串
  20. 计算机二级15年大纲,2015年下半年全国计算机二级考试MSoffice高级应用大纲

热门文章

  1. 微信助手 Mac上一款非常强大的插件
  2. input 类型为 number 时如何去掉数字加减上下箭头
  3. Linux解压tar文件失败
  4. 苹果电脑上创建.zshrc文件
  5. c语言填空题题库 360问,c语言填空题题库.doc
  6. Adobe推出了PS新功能Generative Fill(创成式填充);生成式 AI 将改变电脑架构;
  7. 入门createjs———EaselJS模块基本介绍
  8. WPF图片在运行时不能显示
  9. 创业旅途008——公司注册
  10. 【计组理论期末考试模拟题】21级计科专业计算机组成原理