Mysql的SQL语句优化和事务隔离级别

Posted 可——叹——落叶飘零

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql的SQL语句优化和事务隔离级别相关的知识,希望对你有一定的参考价值。

文章目录

安装步骤

我的文章
https://blog.csdn.net/UnicornRe/article/details/117657298

mysql连接命令

mysql -uroot -p -h x.x.x.x -P 3306

备份:

mysqldump -h 地址 -u用户名 -p密码 otc_v1 >/x/x/backup.sql

优化

  1. 避免使用!=,<>
  2. 会用索引的符号
<<==>>=,BETWEEN,IN,x%
  1. 避免判断null
  2. 避免使用or
select * from teacher where id=1 UNION all select * from teacher where id=2
# 使用UNION时,MySQL会把结果集中重复的记录删掉,而使用UNION ALL ,MySQL会把所有的记录返回,且效率高于UNION
  1. 避免前置%x,使用 x%
  2. 尽量用between代替in ,not in
  3. 避免在 ‘=’ 左边使用算数运算
  4. 联表查询
<!-- 方案 1
        select c.*,p.name parentName
        from sys_menus c left join sys_menus p
        on c.parentId=p.id
        -->
<!-- 方案 2 (推荐)-->
        select c.*,(
        select p.name
        from sys_menus p
        where c.parentId=p.id
        ) parentName
        from sys_menus c
# 联表举例
select 
teacher.name,(select teacher_class.class from teacher_class where teacher_class.teacherId=teacher.id) 
from teacher where teacher.id=1

事务4种特性和4种级别

特性

原子性(Atomicity):一个事务必须被视为一个不可分割的单元,对于其数据修改,要么全都执行,要么全都不执行
一致性(Consistency):数据库总是从一种状态切换到另一种状态,事务在完成时,必须使所有的数据保持一致的状态
隔离性(Isolation):由并发事务所做的修改必须与任何其他并发事务所做的修改隔离
持久性(Durablity):一旦事务提交,所做修改永久保存在数据库

隔离级别
1-4效率依次降低

1Read uncommitted (读未提交):最低级别,任何情况都无法保证
2Read committed (读已提交):可避免脏读的发生。
3Repeatable read (可重复读):可避免脏读、不可重复读的发生。
4Serializable (串行化):可避免脏读、不可重复读、幻读的发生
#设置级别
SET SESSION TX_ISOLATION='READ-COMMITTED';
BEGIN;
#事务内容...
commit;/rollback;

脏读&不可重复读&幻读

脏读

读取到其他事务未提交的数据

不可重复读

不可重复读指的是在同一事务内,不同的时刻读到的同一批数据可能是不一样的,可能会受到其他事务的影响,
比如其他事务改了这批数据并提交了。通常针对数据**更新(UPDATE)**操作。

幻读

幻读是针对数据**插入(INSERT)**操作来说的。假设事务A对某些行的内容作了更改,但是还未提交,此时
事务B插入了与事务A更改前的记录相同的记录行,并且在事务A提交之前先提交了,而这时,在事务A中查询,
会发现好像刚刚的更改对于某些数据未起作用,但其实是事务B刚插入进来的,让用户感觉很魔幻,感觉出现了
幻觉,这就叫幻读。

以上是关于Mysql的SQL语句优化和事务隔离级别的主要内容,如果未能解决你的问题,请参考以下文章

Mysql的SQL语句优化和事务隔离级别

面试必问的MySQL锁与事务隔离级别

mysql的事务,隔离级别和锁

mysql事务以及隔离级别

简述mysql的事务隔离级别都有哪些

mysql 和 TiDB 在 snapshot 隔离级别上的区别