为什么把锁和索引放在一起说?
1 无论是学习一个软件还是评判一个软件都可以从以下角度分析:功能,性能,可用性,可维护性
2 而性能关键点就是锁和索引
3 单个语句慢,调索引。数据库整体慢,调数据库锁设置
怎么理解性能的关键是锁和索引?
要达到最大的QPS,即吞吐量,需要保证:1 并发大,即锁的粒度小 2 单个事务执行的时间短,对开发来说,主要是sql的执行速度,关键点是索引
索引:
平衡二叉树------>B树------->B+树------>B*树
理论上以上树中平衡二叉树的效率是最高,因为它可以最大程序避免列表的遍历
但把索引从磁盘加载到内存是按块加载的,块大小好像是4k, 加入索引列是8字节,子节点设置为500是效率最优的
聚簇索引和二级索引的区别:待补充
什么时候会用到索引 ?什么时候用不到?
理论上只要where条件有该列,索引也有该列,就可以用索引。如果没用索引,则是用索引没有不用索引快。这里涉及二级索引和聚簇索引,待补充
锁:粒度(表 范围 行) 和 操作(共享 排斥) 随意组合使用
表:意向锁(IX IS,自增锁)
范围:间隙锁 (插入意向锁,键*锁)
行: X S
以上锁我们可以直接使用 lock in share mode 和 for update 来加共享锁和排斥锁 , 范围是根据sql语句,引擎或处理层确定
快照读 当前读 MVCC
知识有点多,分成不同的日志,尽量白话不和网上相互抄的一样