开课吧门徒计划必修基础课大厂工程师的必备算法能力


	开课吧门徒计划必修基础课大厂工程师的必备算法能力
[编程语言教程]

1.关系型数据库: MySQL/Oracle/PostSQL

1.InnoDB引擎,事务处理机制

由于mysql中有两套日志机制,一套是存储层的redo log,另一套是server层的binlog,每次更新数据都要对两个日志进行更新。为了防止写日志时只写了其中一个而没有写另外一个,mysql使用了一个叫两阶段提交的方式保证事务的一致性

执行流程:

  1. 首先执行器会找引擎取ID=2这一行数据
  2. 拿到数据后会把数据进行+1操作,然后调用引擎接口把新数据写入
  3. 引擎将数据更新到内存中,并将操作记录到redo log里,此时redo log处于prepare状态。但它不会提交事务,只是通知执行器已经完成任务,可以随时提交。
  4. 执行器生成这个操作的binlog,并把binlog写入磁盘
  5. 最后执行器调用引擎的事务接口,把redo log改为提交状态,更新完成。

2.MySQL优化

粗说:

  1. 加索引的时候尽量准确,避免造成不必要的锁定影响其他查询。

  2. 尽量减少给予范围的数据检索(间隙锁),避免因为间隙锁带来的影响,锁定了不该锁定的记录。

  3. 尽量控制事务的大小,减少锁定的资源量和锁定时间。

  4. 尽量使用较低级别的事务隔离,减少 MySQL 因为事务隔离带来的成本。

细说:

  1. 频繁变动的字段, 不适合建索引
  2. 离散度越高越好, 离散低不适合建索引
  3. like “asd%” 都不一定用索引,其他位置都不用索引查询
  4. 比对规则从左往右, 离散高放前边, 一个索引器反复, 最左前缀原则
  5. 去掉冗余索引, 有联合索引, 就不要单个的联合索引的列
  6. 能用覆盖索引(主键), 就千万不要 select *, 速度至少快1倍
  7. 用or 索引会失效

3.MySQL锁相关

 

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 开课吧门徒计划必修基础课大厂工程师的必备算法能力