MySQL

事务要素ACID:

  1. 原子性(atomicity):事务开始后,所有的操作要么做完要么都不做。如果出错就会回滚到事务开启前的状态。例如转账A扣钱失败,B就不会收到钱。
  2. 一致性(Consistency):事务提交后,要确保结果的一致性,例如转账不能A扣钱,B没收到钱。
  3. 隔离性(Isolation):事务开始后,同一时间只允许一个事务请求同一数据,修改的数据对其他事务是不可见的,避免不同事务之间相互干扰。比如A在取钱,B不能向这张卡转账。
  4. 持久性(Durability):事务完成后,事务对数据库的所有更新都被保存到数据库,不能回滚。

四种隔离级别:

  1. 未提交读(READ UNCOMMITTED):事务中的修改,即使没有提交,对其他事务也是可见的。相当于一个事务对数据的操作未完成,别的事务就能读到被修改的数据,这时回滚,那其他事务就读到脏数据。
  2. 不可重复读-提交读(READ):事务中读到的数据,可以被别的事务修改,再读一次可能就是不一样的值,也叫不可重复读。
  3. 默认-可重复读(REPEATEBLE READ):同一事务中,多次读取同一记录的结果是一致的,MySQL默认的隔离级别。未提交时,当前事务修改的数据,当前事务可见,其他事务不可见。但可能产生幻读,例如别的事务修改了数据并提交,当前事务是看不到的。因为读的是快照(历史版本),select不会更新版本号,insert、update、delete会更新版本号。
  4. SERIALIZABLE(可串行化):最高隔离级别,读取每一行数据都加上锁,可能导致大量的超时和锁争用问题,一般不使用。
事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

 

#设置事务隔离级别为'read-committed'
set @@global.tx_isolation='read-committed';
set @@session.tx_isolation='read-committed';
set @@tx_isolation='read-committed';
#查看事务隔离级别
SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;

索引

索引类型

普通索引 index:加速查找

主键索引 primary key:加速查找+约束(不为空且唯一)

唯一索引 unique:加速查找+约束(唯一)

 

联合索引:参考资料 https://www.cnblogs.com/softidea/p/5977860.html
  - primary key(id,name):联合主键索引
  - unique(id,name):联合唯一索引
  - index(id,name):联合普通索引

全文索引 fulltext:用于搜索很长一篇文章的时候,效果最好

空间索引 spatial:不常用

索引方式

hash:单条查询快,范围查询慢

btree:b+树,层数越多,数据量指数级增长

 

SQL优化

慢查询记录配置项

可将耗时超过指定时间的sql记录到磁盘文件中,方便定位慢查询sql

#慢查询日志
SHOW VARIABLES LIKE "%slow_query_log%"
SET GLOBAL slow_query_log=ON;

#慢查询判定值
SHOW VARIABLES LIKE "%long_query_time%"
SET GLOBAL long_query_time=2;

关键字EXPLAIN

参考资料https://www.cnblogs.com/leeego-123/p/11846613.html

可分析sql是否命中索引,查询范围,查询rows数。

分析sql如下:

type=ALL 连接类型

possible_keys=name_index,job_index 可使用的索引

key=null 命中的索引

rows=1800000 实际查询的行数

通过sql分析,发现sql进行了全表查询,检查表结构及数据发现job字段的值全部为'SALESMAN',所以这个字段并不适合做为索引。

添加一个deptno作为索引,不以or关键字连接job字段,命中索引不再全表查询。

 

 

参考资料:

https://www.jianshu.com/p/bf73c8d50dc2

https://blog.51cto.com/u_9291927/2083190

https://www.zhihu.com/question/20596402?sort=created

https://www.jianshu.com/p/2084216e81ce

 

posted @ 2021-07-26 00:05  cqutwangyu  阅读(26)  评论(0编辑  收藏  举报