开启事务->SQL解析、查询计划生成->查询要修改的数据->校验锁和加锁->修改数据和生成日志->本地提交->主备复制->返回提交成功->脏页刷入磁盘
开启事务
start transaction; update user set name = 'zzz' where id = 1; commit;
第一次执行增删改SQL时分配一个事务号
SQL解析、查询计划生成
查询缓存再MySQL5.7版本默认禁用,在MySQ8.0版本被删除
开启事务->SQL解析、查询计划生成->查询要修改的数据->校验锁和加锁->修改数据和生成日志->本地提交->主备复制->返回提交成功->脏页刷入磁盘
start transaction; update user set name = 'zzz' where id = 1; commit;
第一次执行增删改SQL时分配一个事务号
查询缓存再MySQL5.7版本默认禁用,在MySQ8.0版本被删除
MySQL 在处理排序时有两种主要方式:
通过explain可以进行分析
https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool.html
缓冲池是主内存中的一个区域, InnoDB 在访问表和索引数据时将其缓存起来。缓冲池允许从内存直接访问常用数据,从而加快处理速度。在专用服务器上,通常会将多达 80% 的物理内存分配给缓冲池。
页作为最小读取单位,默认16kb。
InnoDB存储引擎通过维护Buffer_Pool来缓存数据,从而提高读取效率。Buffer_Pool中缓存的数据页类型包括数据页、索引页等,其通过改造版LRU进行淘汰策略。
HyperLogLog 是一种用于统计基数(cardinality)的算法,它使用一个固定大小的数组来表示一个集合,并使用一个哈希函数来确定元素的位置。HyperLogLog 的核心思想是通过估计数组中 0 的数量来估计集合的大小。
HyperLogLog 的优点是它使用固定大小的数组,因此它的空间复杂度是 O(log n),其中 n 是集合的大小。这使得 HyperLogLog 非常适合处理大规模数据集。