MySQL百万数据量的查询优化&&数据库事务(待更新)

记录自己所学
MySQL百万数据量的查询优化&&数据库事务(待更新)

一、实验

1、准备一个百万数据表进行实验

MySQL百万数据量的查询优化&&数据库事务(待更新)_第1张图片

MySQL百万数据量的查询优化&&数据库事务(待更新)_第2张图片

2、通过id查询

SELECT * FROM user where id = 10000;

MySQL百万数据量的查询优化&&数据库事务(待更新)_第3张图片

MySQL百万数据量的查询优化&&数据库事务(待更新)_第4张图片

3、通过name查询

MySQL百万数据量的查询优化&&数据库事务(待更新)_第5张图片

MySQL百万数据量的查询优化&&数据库事务(待更新)_第6张图片

4、对比分析

由此可见,虽然查询的是同一条数据,但是由于查询条件不同,查询效率差别巨大。
导致这样的结果是因为:
id作为条件可以快速找到数据,因为数据库对id这一列创建索引
name作为条件需要全表扫描,因为数据库没有对name这一列创建索引

接下来我们手动创建name索引

5、创建name索引

MySQL百万数据量的查询优化&&数据库事务(待更新)_第7张图片

6、再次执行查询

MySQL百万数据量的查询优化&&数据库事务(待更新)_第8张图片

由此可见,创建索引可以大大提升搜索效率

二、索引知识点总结//TODO

sex列不适合创建索引,只有男女两个取值
取值相对唯一的列适合做索引
索引的底层使用B+树
索引失效的场景
聚簇索引和非聚簇的区别
回表查询
联合索引
最左前缀原则
索引下推
。。。

对于百万/千万/亿万数据查询优化:
1、索引是性价比最高的解决方案,索引是数据库自带的机制
2、做分库分表
3、做缓存
4、走搜索引擎,ES技术…

三、数据库事务//TODO

– 数据库事务
什么是事务
事务的四大特性
四种隔离级别
锁机制

– autocommit自动提交更新,有ON和OFF两个取值,ON表示开启,OFF表示关闭
– 默认值是ON
SET autocommit = off;

有了事务机制后,我们可以在应用层(Java)编写流程控制,来控制事务提交或回滚的逻辑
在应用层的逻辑是:
如果事务内所有操作都成功了,执行COMMIT提交
如果事务内有未成功的操作,执行ROLLBACK回滚

数据库有一个事务异常结束的机制:回滚

eg:
MySQL百万数据量的查询优化&&数据库事务(待更新)_第9张图片

你可能感兴趣的:(我的小成就,mysql,sql,数据库,面试)