面对亿级数据,MySQL硬的起来么?
很多粉丝问我: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亿数据根本不是问题,即使是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毫秒。
上面测试效果都是在我们笔记本上面的测试效果,如果放在线上去跑,数据会更好看!
总结一下
mysql面对亿级别的数据到底行不行呢?看看上面的数据,不用我说了吧
mysql数据量上去之后,比如千万,亿级别,如果不走索引,去查询,这个肯定是用不成的,用户是无法接受的。
mysql数据量大了,千万,亿级别,查询的时候,带上条件,并且条件必须得走索引,那么速度是飞快的,毫秒级别的。
面对亿级数据,MySQL硬的起来么?相关推荐
- 亿级数据mysql优化
亿级数据优化 情况简介 用户分析系统以用户的心跳数据为依据,统计查询用户的各种情况.心跳数据很多,经过去重,去无效,数据量还是在2亿/月的水平.普通的查询在这个量级的数据库上根本查不出来,为此,分表分 ...
- MySQL高性能:索引、锁、事务、分库分表如何撑起亿级数据
最近项目增加,缺人手,面试不少,但匹配的人少的可怜.跟其他组的面试官聊,他也抱怨了一番,说候选人有点儿花拳绣腿,回答问题不落地,拿面试最常问的MySQL来说,并不只是懂"增删改查" ...
- Mysql数据库快速插入亿级数据
Mysql数据库快速插入亿级数据 接手一个项目,该项目运行了两三年了.接手的时候,只有一个部署文档和全部代码,再没有其他文档了,也没有其他任何人了解这个项目.好吧,试着深入了解吧.代码在测试环境跑来了 ...
- 蚂蚁金服面对亿级并发场景的组件体系设计
来自:蚂蚁金服公众号mPaas 作者:吕丹(凝睇),2011 年加入支付宝,先后负责了支付宝 Wap.alipass 卡券.SYNC 数据同步等项目,并参与了多次双十一.双十二.春节红包大促活动,在客 ...
- 阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了
说在前面 在尼恩指导了几百个小伙伴的面试,在这些过程中, 非常.非常高频的一个面试题: 千万级数据,如何做性能优化? 亿级数据,如何做性能优化? 最近,有个小伙伴阿里二面,又遇到了这个问题. 其实,尼 ...
- 架构系列---蚂蚁金服面对亿级并发场景的组件体系设计
今天,我主要想和大家分享一下移动领域基础组件体系,内容大致可以分为四大块,第一块是标准移动研发所需的基础服务体系,第二块是支撑亿级并发的核心组件"移动接入"的架构演进过程,第三块是 ...
- 亿级数据,秒级响应!看Smartbi如何助力经济普查,把脉时代经济!
距离第一次经济普查工作已经整整 15 年,该项工作是我国经济发展进入 21 世纪进行的一项对重大国情国力的全面调查,是党中央国务院为正确认识国情,准确把握国力,科学制定国策而采取的一项重要举措. 然而 ...
- excel统计行数_百万到亿级数据,快速统计查询
大家好,我是dk.这是Excel神器PowerQuery实战入门系列的第3篇.往后,我会更新更多关于PQ的相关内容,有兴趣的小伙伴可以关注下. 众所周知,Excel2003版最大行数是65536行,到 ...
- 【python 处理亿级数据】使用 Pandas 处理亿级数据
此前有一篇文章<别老扯什么Hadoop了,你的数据根本不够大>指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择.事实确实如此,在数据分析领域,那么如何处理亿级数据呢 ...
最新文章
- YYAnimatedImageView--gif在ios14之后只能播放一次
- 窄带信号和宽带信号的区别和联系
- Kubernetes 系列(三):Kubernetes使用Traefik Ingress暴露服务
- 正则表达式收藏(四)之MySQL的正则
- 你真的以为你了解Java的序列化了吗
- 为什么数据库有时候不能定位阻塞(Blocker)源头的SQL语句
- Ubuntu 18.4 镜像
- LeetCode-260 Single Number III
- iOS及Android 启动页面(即欢迎页面),引导页面,及广告页面的加载
- 在react开发过程中由于setState的异步特性,获取最新state遇到问题
- c++ opencv4.5.0 头文件_简单的C程序分析(first.c程序)
- Windows 关于Robocopy的使用详解
- 【信号处理】信号与系统 电子课本(郑君里)
- c语言 电脑 控制串口,PC与单片机RS-232串口的通讯和控制
- junit5 入门系列教程-13-junit5 测试接口及默认方法
- 东南大学硕士毕业论文Latex 模版教程
- Python视频制作 MoviePy框架视频处理模块
- shell实现论坛灌水机
- 【Python3笔记】五、Python 字符串
- 计算机二级15年大纲,2015年下半年全国计算机二级考试MSoffice高级应用大纲