记录自己所学
MySQL百万数据量的查询优化&&数据库事务(待更新)
一、实验
1、准备一个百万数据表进行实验
2、通过id查询
SELECT * FROM user where id = 10000;
3、通过name查询
4、对比分析
由此可见,虽然查询的是同一条数据,但是由于查询条件不同,查询效率差别巨大。
导致这样的结果是因为:
id作为条件可以快速找到数据,因为数据库对id这一列创建索引
name作为条件需要全表扫描,因为数据库没有对name这一列创建索引
接下来我们手动创建name索引
5、创建name索引
6、再次执行查询
扫描二维码关注公众号,回复:
17500079 查看本文章
![](/qrcode.jpg)
由此可见,创建索引可以大大提升搜索效率
二、索引知识点总结//TODO
sex列不适合创建索引,只有男女两个取值
取值相对唯一的列适合做索引
索引的底层使用B+树
索引失效的场景
聚簇索引和非聚簇的区别
回表查询
联合索引
最左前缀原则
索引下推
。。。
对于百万/千万/亿万数据查询优化:
1、索引是性价比最高的解决方案,索引是数据库自带的机制
2、做分库分表
3、做缓存
4、走搜索引擎,ES技术…
三、数据库事务//TODO
– 数据库事务
什么是事务
事务的四大特性
四种隔离级别
锁机制
– autocommit自动提交更新,有ON和OFF两个取值,ON表示开启,OFF表示关闭
– 默认值是ON
SET autocommit = off;
有了事务机制后,我们可以在应用层(Java)编写流程控制,来控制事务提交或回滚的逻辑
在应用层的逻辑是:
如果事务内所有操作都成功了,执行COMMIT提交
如果事务内有未成功的操作,执行ROLLBACK回滚
数据库有一个事务异常结束的机制:回滚
eg: