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
优化
- 避免使用!=,<>
- 会用索引的符号
<,<=,=,>,>=,BETWEEN,IN,x%
- 避免判断null
- 避免使用or
select * from teacher where id=1 UNION all select * from teacher where id=2
# 使用UNION时,MySQL会把结果集中重复的记录删掉,而使用UNION ALL ,MySQL会把所有的记录返回,且效率高于UNION
- 避免前置%x,使用 x%
- 尽量用between代替in ,not in
- 避免在 ‘=’ 左边使用算数运算
- 联表查询
<!-- 方案 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效率依次降低
1、Read uncommitted (读未提交):最低级别,任何情况都无法保证
2、Read committed (读已提交):可避免脏读的发生。
3、Repeatable read (可重复读):可避免脏读、不可重复读的发生。
4、Serializable (串行化):可避免脏读、不可重复读、幻读的发生
#设置级别
SET SESSION TX_ISOLATION='READ-COMMITTED';
BEGIN;
#事务内容...
commit;/rollback;
脏读&不可重复读&幻读
脏读
读取到其他事务未提交的数据
不可重复读
一个事务提交的数据,可以被另一个事务立即读取
一个事务中执行两次同样的SELECT语句得到不同结果,因此已提交读又被称为不可重复读
幻读
可重复读锁定被查询到的内容,如果新插入数据,新的数据没有被锁定,读取会读到新数据
读取到已经被删除的数据
以上是关于Mysql的SQL语句优化和事务隔离级别的主要内容,如果未能解决你的问题,请参考以下文章