事务
方式一:
方式二:
脏读、幻读和不可重复读是数据库事务处理中可能出现的三种并发控制问题,它们都与事务的隔离级别和并发执行有关。
**脏读(Dirty Read)**发生在当一个事务读取了另一个尚未提交的事务的修改数据。具体来说,当事务A正在修改数据但还没有提交时,事务B读取了事务A尚未提交的修改数据。如果事务A最终回滚了它的修改,那么事务B所读取的数据就是无效的或“脏”的。脏读可能导致数据的不一致性和错误的结果。
**不可重复读(Non-repeatable Read)**是指在一个事务内,多次读取同一数据,但由于其他事务的修改导致每次读取的数据可能不同。例如,事务A首先读取了某个数据项的值,然后事务B修改了该数据项并提交,当事务A再次读取该数据项时,发现其值已经改变。不可重复读破坏了事务的一致性,因为同一个事务中的多次读取可能得到不同的结果。
**幻读(Phantom Read)**是指在一个事务内,同样的查询条件下,多次执行查询得到的结果集不一致。这通常发生在其他事务向表中插入或删除了符合查询条件的记录。例如,事务A执行了一个查询,返回了某些记录,然后事务B插入了一条新的记录,这条新记录符合事务A的查询条件。当事务A再次执行相同的查询时,会发现多了一条新的记录,就好像出现了“幻影”一样。
存储引擎
默认innodb存储引擎
索引
索引结构
B+Tree
(左小右大) 中间元素向上分且在叶子节点依旧保留并形成单向链表
引索分类
答:第一条sql效率高,因为第一条sql直接走聚集索引,第二条sql走二级索引之后再回表查询
引索语法
#查看当前表的索引
show index from student;
#创建常规引索(索引命名规范:idx_{{引索字段名}})
create index idx_student_name on student(name);
#创建唯一引索(该列的值不能重复)
create unique index idx_student_phone on student(phone);
#创建联合索引
create index idx_id_name_phone on student(id, name, phone);
#删除索引
drop index idx_student_phone on student;
性能分析
一般在开发环境下开启慢查询,线上环境关闭慢查询,因为开启慢查询会损耗一部分musql的性能
Windows慢查询日志:LAPTOP-DHDL2KHM-slow.log
profile很少用
#查询是否开启profiling(检查慢查询的工具,0表示未开启,1表示已开启)
select @@profiling;
#开启profiling
set global profiling=1;
#查询执行的sql语句时间
show profiles;
#查询id为584的执行具体时间(for爆红是idea问题)
show profile for query 584;
索引使用
如果最左边的列不存在,引索失效,与sql语句的where条件顺序无关
可以在业务允许时使>=符号
答:建立username和password的联合索引
![](https://i-blog.csdnimg.cn/blog_migrate/d3ca92debfd7ca637a1c8a31aff0ad6b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/37e4efcf528ef222d74fde489cd76784.png)
![](https://i-blog.csdnimg.cn/blog_migrate/43536d059ccec84e1db24c3c54d7848f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/71afeffdd1c33af88b70911493ccc288.png)
索引设计原则
![](https://i-blog.csdnimg.cn/blog_migrate/b7680b3df01741b4e4e5cde1e8fca552.png)
![](https://i-blog.csdnimg.cn/blog_migrate/130d466dcc0495f815d04293e9924763.png)
![](https://i-blog.csdnimg.cn/blog_migrate/24b7418568190a4407e75641da220ca8.png)
SQL优化
数据插入优化
![](https://i-blog.csdnimg.cn/blog_migrate/a03af974688b2fc43bb5b061db5ebeb9.png)
主键优化
order by 优化
group by 优化
limit 优化
覆盖索引:指一个索引不仅能够满足查询条件,还能够覆盖查询结果中所有需要的数据,从而避免对表进行访问的一种索引。(查询的所有字段都在创建的索引字段中)
count 优化
updata 优化
注意:更新操作要根据索引更新,不然行锁变表锁,期间其他的用户就不能更新,削弱并发能力
SQL优化总结
![](https://i-blog.csdnimg.cn/blog_migrate/b61a3cb95d1bab31a28ce4cedd110625.png)