Mysql

事务

ACID

脏读

幻读

不可重复读

隔离级别

类型

索引

字段类型 数据类型      索引类型 索引方法
字符串类型 CHARVARCHARTEXT INDEX、UNIQUE、PRIMARY KEY、FULLTEXT BTREE/HASH
整数类型 INTBIGINTTINYINT INDEX、UNIQUE、PRIMARY KEY、FULLTEXT
浮点数类型 FLOATDOUBLE INDEX(普通索引)
日期和时间类型 DATETIMEDATETIME INDEX
枚举类型、集合类型 INDEX

视图

引擎

主从

大数据

不同数据量的插入/查询/更新/删除

环境

硬件 1C(8核) / 16G / 500G
系统 / 工具 win11 / Idea2021.2.3
操作方式 MybatisPlus 对象方式
数据库版本 Mariadb 数据库(5.5.68-MariaDB)
引擎 InnoDB
字符集/排序规则 utf-8 / utf8-bin
索引/约束/外键
网络延迟 win系统(idea)  vmware(centos7)

插入 

数据量 时间 方式 代码
200万 25分钟

新增

StopWatch stopWatch = new StopWatch();
stopWatch.start("入库");
for (int i = 0; i < 2000000; i++) {
    User user = new User();
    user.setUserName("hj"+i);
    user.setNote("测试备注"+i);
    user.setPassword("123123");
    user.setPhone("13121952195");
    user.setSex(1);
    user.setBalance(1.58);
    myTestMapper.insert(user);
}
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
1000万 53分钟39秒

新增

(10个线程,每个线程100万)

 
1000万

新增

(一个事务)

200万 1分钟不到 删除
StopWatch stopWatch = new StopWatch();
stopWatch.start("删除");
myTestMapper.delete(new QueryWrapper().isNotNull("id"));
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
700万 23秒 查询总数

查询

查询总数

数据量 耗时(秒) 方式
700w(再插入的途中查询的) 23 select count(*) from my_user
1000w 19 select count(*) from my_user
1000w 21 select count(*) from my_user
1000w 15 select count(*) from my_user
1000w 10.9 select count(*) from my_user
1000w 10.18 select count(*) from my_user
1000w 10.3 select count(*) from my_user

查询的耗时越来越小。可以有以下原因。

1. 操作系统将磁盘的数据加载到内存中所以速度快了

2. InnoDB缓冲池,缓存了数据库的数据页,减少磁盘I/O操作,减少了耗时

3. MariadbDB提供了查询缓存的功能,可以缓存查询语句和响应的结果集。但是查询缓存对于频繁更新的表/大型结果集不太适合,所以10.4版本被废弃了。这里mariadb版本是5.5.68还有缓存功能。可能用到了缓存。

单个等于条件查询

数据量1000w,无索引

耗时(秒)/(次) sql 索引类型 索引方法 添加索引时间

12.96

11.9

11.6

11.7

11.6

select * from  `my_user` where user_name =  'hj2584567'

0.027

0.018

0.016

select * from  `my_user` where user_name =  'hj2584567' NORMAL(基本的索引) BTREE 387.56

0.021

0.017

select * from  `my_user` where user_name =  'hj2584567' UNIQUE(唯一索引) BTREE

 

两个等于条件查询

三个等于条件查询

多个等于条件查询

Like 条件查询

right Like 条件查询

Left Like 条件查询

分组查询

组合查询

一系列组合查询

添加索引

数据量1000w,添加索引的耗时

耗时 索引类型 索引方法

计算方式

慢查询

其他

触发器

Q&A

sql语句

这里主要记录mariadb。对一些sql也会记录Mysql的差别

查询数据库版本

你可能感兴趣的:(八股文,mysql)