MySQL
文章平均质量分 91
MySQL一些常见的知识点,工作中可能经常遇到但是却经常被忽视的点
壹氿
做一个有准备的人吧~
展开
-
order by是怎么排序的,该如何优化?
在我们的业务系统中难免用到排序,那order by这个语法你肯定用过,今天我们就来聊聊order by是怎么工作的,遇到排序慢了又该怎么优化。order by相关的官方文档:https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.htmlsort bufferMySQL会为每个线程分配一块内存用于排序,这块内存就被称为“sort buffer”,这块内存的大小通过参数sort_buffer_size来控制,超过这个值就需要使用磁原创 2021-11-24 09:52:55 · 2273 阅读 · 0 评论 -
InnoDB怎么执行删除的?
InnoDB表都包含哪些部分一个InnoDB表包含两部分,表结构定义和数据。在MySQL8.0之前,表结构存在以.frm为后缀的文件里,MySQL8.0版本,已经允许把表结构定义存放在系统数据表中了(因为表结构定义占用的空间很小)简单的删除表数据,表占用空间不会减小表数据既可以存在共享表空间里,也可以是单独的文件,这个行为是由参数innodb_file_per_table控制的:设置为OFF:表的数据放在系统共享表空间,也就是根数据字典放在一起设置为ON:每个InnoDB表数据存储在一个.i.原创 2021-11-08 09:54:37 · 658 阅读 · 0 评论 -
MySQL的“刷脏”机制
在MySQL日志系统文章中我们已经介绍过MySQL中的重做日志redo log,对于更新操作,InnoDB会写redo log,以保证MySQL崩溃恢复。InnoDB在处理更新语句时,更新完内存记完redo log后就返回客户端成功,更新结束。脏页此时内存中的数据和磁盘中的数据是不一致的,不一致的这个数据页就被称为“脏页”。刷脏页(flush)既然磁盘中的数据和内存中的数据有不一致的,那肯定就涉及到将内存中的数据同步到磁盘中,那这个过程就被称为**“刷脏”**。刷脏页的时机MySQL定时原创 2021-10-21 09:06:14 · 1505 阅读 · 1 评论 -
MySQL中的间隙锁
在MySQL中的锁机制文章中我们讲解了MySQL中涉及的锁相关概念,本片文章我们来详细解析下MySQL中的间隙锁,跟着我的脚步一起学习吧!有问题欢迎大家指正讨论!????????????间隙锁用来解决什么问题?用来解决幻读问题,并且幻读只在RR隔离级别下才会存在。什么是幻读?幻读指的是同一个事务前后两次查询同一个范围的时候,后一次查询看到了前一次查询没看到的行。说明:幻读仅专指“新插入的行”在RR隔离级别下,普通的查询是快照读,是不会看到别的事务插入的数据的,因此,幻读在“当前读”下才会原创 2021-10-12 11:27:17 · 535 阅读 · 0 评论 -
MySQL中的锁机制
本片文章总结下MySQL锁相关的知识,有问题欢迎大家指正讨论!全局锁全局锁会对整个数据库加锁,开启全局锁之后数据库处于Read Only状态,所有DML及DDL语句都会被阻塞;通过命令Flush tables with read lock(FTWRL)来开启全局锁,对应使用unlocak tablse来解锁。场景: 做全库逻辑备份,也就是把整个库每个表都select出来存成文本弊端:在主库备份,备份期间涉及DDL业务需要暂停在从库备份,备份期间从库不能执行主库同步过来的binlog,导致.原创 2021-10-12 11:23:23 · 162 阅读 · 0 评论 -
MySQL索引你真的会用吗?
表构成在InnoDB中,每一张表其实就是多个B+数,即一个主键索引树和多个非主键索引树。如果不使用索引进行查询,则从主键索引B+树的叶子结点进行遍历索引类型主键索引(聚簇索引)叶子节点存储的是整行的数据非主键索引(二级索引)叶子节点存储的是主键的值回表基于非主键索引查询,如果要查询的字段不在非主键索引中的非主键字段,就需要再根据主键的值去查询主键索引树,查询出其他字段的值,这个操作叫回表。假设有一张表t_user,主键索引是id,name是非主键索引create table .原创 2021-10-10 15:22:00 · 115 阅读 · 0 评论 -
MySQL普通索引和唯一索引的区别
查询**普通索引:**查找到满足条件的第一个记录后,需要检索下一个记录,直到碰到第一个不满足条件的记录(由于B+数的叶子节点的数据都是顺序存放的)**唯一索引:**只要查找到满足条件的第一个记录后就停止检索buffer pool这两种查询方式的性能差距微乎其微,原因是InnoDB底层是以页才存储数据,每一页都是16KB,在读取数据的时候不是只是将符合条件的记录读取出来,而是将记录所在的整页数据都读取出来放到内存中,这个内存就是**buffer pool,**这样当读取到满足条件的记录后,就不.原创 2021-10-05 09:10:58 · 540 阅读 · 0 评论 -
读已提交和可重复读隔离级别下到底能读到哪些记录?
在事务的隔离性及MySQL多版本并发控制实现这篇文章中讲过中讲过,在RC和RR隔离级别下MySQL有ReadView来实现隔离级别。在RC隔离级别下,ReadView是在每次执行查询时会生成;在RR隔离级别下,当使用start transaction with consistent snapshot开启事务,那ReadView就是在开启事务的时候创建,如果使用begin或者start transaction,ReadView就是在开启事务后执行第一条查询语句时才会生成。事务ID(trx_id)I原创 2021-09-30 10:25:39 · 666 阅读 · 0 评论 -
事务的隔离性及MySQL多版本并发控制实现
隔离级别说到隔离性,肯定就会想到隔离级别,SQL标准的事务隔离级别包括:读未提交(Read uncommited 简称RU):指一个事务还没有提交,它做的修改就可以被另一个事务读到读提交(Read Commited 简称RC):指直到一个事务提交,它做的修改才可以被另一个事务读到可重复度(Repeatable Read 简称RR):指从一个事务开启,到事务提交,在这个事务执行过程中,它看到的数据总是跟在这个事务启动的时候看到的数据一致串行化(Serializable):对同一行记录,“写”会加.原创 2021-09-27 09:52:49 · 125 阅读 · 0 评论