小知识点

用于记录一些重要的知识点

  • MySQL的innodb存储引擎支持行级锁(MYISAM不支持行级锁),innodb的行锁是通过给索引项加锁实现的,这就意味着只有通过索引条件检索数据时,innodb才使用行锁,否则使用表锁。

  • 更新数据都是先读后写的,而这个读,只能读当前的值,称为“当前读”(current read),除了update语句外,select语句如果加锁,也是当前读

  • Linux默认中内存的页大小是4kb,mysql的innodb一页是16kb,buffer pool也是16kb

  • 在前缀重复度较高的时候考虑倒序存储,在前后缀重复度都比较高的时候,可以使用hash字段,可以在表上再创建一个整数字段,同时在这个字段上创建索引

  • MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高,

    而InnoDB引擎就麻烦了,它执行count(*)的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数(由于MVCC)

  • 加锁规则

    • 原则1:加锁的基本单位是next-key lock。next-key lock是前开后闭区间。

    • 原则2:查找过程中访问到的对象才会加锁。

    • 优化1:索引上的等值查询,给唯一索引加锁的时候,next-key lock退化为行锁。

    • 优化2:索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock退化为间隙锁。

    • 一个bug:唯一索引上的范围查询会访问到不满足条件的第一个值为止。

  • Java 每实例化一个 Exception,都会对当时的栈进行快照,这是一个相对比较重的操 作。如果发生的非常频繁,这个开销可就不能被忽略了。

  • 为什么要用base64编码

    ​ 我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。 而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备, 由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。 所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了

  • 只有RR和以上隔离级别才有GAP lock和next-key lock(RR能防幻读,但不是所有情况,具体情况具体分析)
    https://www.cnblogs.com/CoderAyu/p/11525408.html#idx_8

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×