MySQL
文章平均质量分 84
向北~
这个作者很懒,什么都没留下…
展开
-
MySQL 中的字符集和排序规则
就意味着使用1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,那请使用。字符集表示一个字符需要使用1~4个字节,但是我们常用的一些字符使用1~3个字节就可以表示了。比较规则名称以与其关联的字符集的名称开头。如上图的查询结果的比较规则名称都是以。中字符集表示一个字符所用最大字节长度在某些方面会影响系统的存储和性能,所以。每种字符集对应若干种比较规则,每种字符集都有一种默认的比较规则,的就是该字符集的默认比较规则,比方说。表示以波兰语的规则比较,原创 2023-05-06 08:30:00 · 437 阅读 · 0 评论 -
MySQL:脏页
客户端的读写都直接访问节点A,而节点B是A的备库,只是将A的更新都同步过来,到本地执行。这样可以保持节点B和A的数据是相同的。这时候客户端读写访问的都是节点B,而节点A是B的备库。主库A内部有一个线程,专门用于服务备库B的这个长连接。这时,虽然节点B没有被直接访问,但依然建议把节点B(也就是备库)设置成只读(readonly)模式。因为readonly设置对超级(super)权限用户是无效的,而用于同步更新的线程,就拥有超级权限。主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写binlog。原创 2023-05-08 08:45:00 · 37 阅读 · 0 评论 -
MySQL:主备原理
客户端的读写都直接访问节点A,而节点B是A的备库,只是将A的更新都同步过来,到本地执行。这样可以保持节点B和A的数据是相同的。这时候客户端读写访问的都是节点B,而节点A是B的备库。主库A内部有一个线程,专门用于服务备库B的这个长连接。这时,虽然节点B没有被直接访问,但依然建议把节点B(也就是备库)设置成只读(readonly)模式。因为readonly设置对超级(super)权限用户是无效的,而用于同步更新的线程,就拥有超级权限。主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写binlog。原创 2023-05-05 08:45:00 · 118 阅读 · 0 评论 -
MySQL 脏页
InnoDB在处理更新语句的时候,只做了写 redo log 这一个磁盘操作,在更新内存写完redo log后,就返回给客户端,本次更新成功。当内存数据页跟磁盘数据页内容不一致的时候,称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。一条SQL语句,正常执行的时候特别快,但有时它就会变得特别慢。此时可能就是在刷脏页,即把内存里的数据写入磁盘的过程(flush)。原创 2023-05-06 08:30:00 · 206 阅读 · 0 评论 -
MySQL:order by 原理
这个算法有一个问题,就是如果查询要返回的字段很多的话,那么sort_buffer里面要放的字段数太多,这样内存里能够同时放下的行数很少,要分成很多个临时文件,排序的性能会很差。否则就需要放在临时文件中排序。在这个索引里面,我们依然可以用树搜索的方式定位到第一个满足city='杭州’的记录,并且额外确保了,接下来按顺序取“下一条记录”的遍历过程中,只要city的值是杭州,name的值就一定是有序的。这时,对于city字段的值相同的行来说,还是按照name字段的值递增排序的,此时的查询语句也就不再需要排序了。原创 2023-05-04 15:51:26 · 138 阅读 · 0 评论 -
MySQL:详解 change buffer
在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行 change buffer 中与这个页有关的操作。因为 merge 的时候是真正进行数据更新的时刻,而 change buffer 的主要目的就是将记录的变更动作缓存下来,所以在一个数据页做 merge 之前,change buffer 记录的变更越多,即这个页面上要更新的次数越多,收益就越大。当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的。的过程中,也会执行 merge 操作。原创 2023-04-30 10:27:39 · 214 阅读 · 0 评论 -
MySQL:count() 的不同用法
MySQL 中的 count() 有很多用法,如count(*)、count(字段)、count(主键id)、count(1),这篇文章就主要描述以下不同 count() 的用法与区别。count()对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加。对于count(*)这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的。server层拿到id后,判断是不可能为空的,就按行累加。server层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。原创 2023-04-28 09:47:32 · 139 阅读 · 0 评论 -
MySQL:count() 的各种用法和区别
count()对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加。注意这里是没有过滤条件的count(*),如果加了where 条件的话,MyISAM表也不能返回得这么快。对于count(*)这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的。server层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。当然,InnoDB 在执行count(*)操作的时候还是做了优化的。在不同的MySQL引擎中,count(*)有不同的实现方式。原创 2023-03-29 15:09:13 · 128 阅读 · 0 评论 -
MySQL 中 change buffer 的作用
在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行 change buffer 中与这个页有关的操作。因为 merge 的时候是真正进行数据更新的时刻,而 change buffer 的主要目的就是将记录的变更动作缓存下来,所以在一个数据页做 merge 之前,change buffer 记录的变更越多,即这个页面上要更新的次数越多,收益就越大。当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的。的过程中,也会执行 merge 操作。原创 2023-03-28 08:30:00 · 183 阅读 · 0 评论 -
MySQL 索引详解
MySQL 索引详解原创 2023-03-26 09:00:00 · 32 阅读 · 0 评论 -
MySQL 事务详解
MySQL 事务详解以及隔离级别与 MVCC 的相关知识原创 2023-03-25 14:37:27 · 81 阅读 · 0 评论 -
MySQL 中的锁
在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。此外,当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态,称为死锁。当然,当使用支持事务的引擎时,我们可以使用事务的方式来保证备份期间的一致性。行锁就是针对数据表中行记录的锁。产生幻读的原因是,行锁只能锁住行,但是新插入记录这个动作,要更新的是记录之间的“间隙”。间隙锁的引入,可能会导致同样的语句锁住更大的范围,会影响并发度。原创 2023-03-27 08:30:00 · 30 阅读 · 0 评论 -
MySQL:更新语句执行流程
SQL 更新语句执行流程原创 2023-03-21 17:00:00 · 188 阅读 · 0 评论 -
MySQL 三大日志:redo log,bin log,undo log
MySQL 三大日志 redo log,bin log,undo log 详解原创 2023-02-28 08:30:00 · 175 阅读 · 0 评论 -
MySQL:一条查询语句的执行流程
MySQL 查询语句执行流程原创 2023-02-27 09:00:00 · 1315 阅读 · 1 评论