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;

脏读&不可重复读&幻读

脏读

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

不可重复读

一个事务提交的数据,可以被另一个事务立即读取
一个事务中执行两次同样的SELECT语句得到不同结果,因此已提交读又被称为不可重复读

幻读

可重复读锁定被查询到的内容,如果新插入数据,新的数据没有被锁定,读取会读到新数据
读取到已经被删除的数据
CSDN 社区图书馆,开张营业! 深读计划,写书评领图书福利~

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

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

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

mysql的事务,隔离级别和锁

mysql事务以及隔离级别

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

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