
MySQL
文章平均质量分 62
MySQL
纯洁2016
知识在于积累!
展开
-
MySQL深度解析---可重复读的间隙锁
InnoDB的默认事务隔离级别是可重复读一、幻读1.SQL场景复现建一个测试表:CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `c` (`c`)) ENGINE=InnoDB;insert into t values(0,0,0),(5,5,5),(10,10,10),(15,15.原创 2021-03-01 15:20:22 · 1591 阅读 · 0 评论 -
MySQL深度解析---单行SQL慢查询原因分析
此处讨论不涉及CUP占用高或IO利用率过高导致的SQL执行慢问题一、查询长时间不返回对于一个SQL,如果长时间不返回,可以执行show processlist命令来查看所有线程的状态mysql> show processlist1.等MDL锁执行show processlist命令后,State中显示:Waiting for table metadata lock 表示的是,现在有一个线程正在表t上请求或者持有MDL写锁,把select语句堵住了。处理方式找到谁持有MDL写锁,然.原创 2020-12-18 09:40:55 · 271 阅读 · 0 评论 -
MySQL深度解析---函数对性能的影响
重点:对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索(索引)功能一、条件字段函数操作交易记录表tradelog 包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段建表语句如下:mysql> CREATE TABLE `tradelog` ( `id` int(11) NOT NULL, `tradeid` varchar(32) DEFAULT NULL, `operator` int(11) DE原创 2020-12-17 16:51:01 · 3357 阅读 · 0 评论 -
MySQL深度解析---临时表排序规则
一、内存临时表排序内存临时表触发条件:rand() 随机函数mysql> explain select word from words order by rand() limit 3;Extra字段显示Using temporary,表示的是需要使用临时表;Using filesort,表示的是需要执行排序操作。因此这个Extra的意思就是,需要临时表,并且需要在临时表上排序。1.内存临时表排序方式选择对于内存临时表来说,表中的数据都在内存中存储,相当于回表过程只是简单地根据原创 2020-12-17 14:53:37 · 1436 阅读 · 0 评论 -
MySQL深度解析---OrderBy工作原理
案例前提假设一个表的部分定义是这样的CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`), KEY `city` (`city`)) ENGINE=InnoDB;要查询城市是原创 2020-12-17 09:54:36 · 222 阅读 · 0 评论 -
MySQL深度解析--Count函数的用法
MySQL中Count(*)的用法1.Count的实现方式MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高;InnoDB引擎就麻烦了,它执行count(*)的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。这和InnoDB的事务设计有关系,可重复读是它默认的隔离级别,在代码上就是通过多版本并发控制,也就是MVCC来实现的。每一行记录都要判断自己是否对这个会话可见,因此对于count(*)请求来说,InnoDB只好把数据一行一行地读原创 2020-10-28 11:27:48 · 601 阅读 · 0 评论 -
MySQL深度解析--数据的删除与重建表
Ⅰ.数据存放和数据删除1.MySQL中数据的删除流程(delete)删除一条记录时,InnoDB会将该记录标记为删除(可复用)状态。并不会从磁盘上释放该记录所在的空间,只是如果后面有数据要插入该位置时可以直接复用该存储空间。删掉了一个数据页上的所有记录时,整个数据页就可以被复用了。如果表(任意表)需要新的数据页时,都可以复用这个数据页。数据页的复用和记录的复用是不同的记录的复用,只限于符合范围条件的数据。数据页的复用,可以复用到任何位置。2.数据空洞删除数据或者插入数据会造成数据原创 2020-10-28 10:52:37 · 1628 阅读 · 0 评论 -
MySQL深度解析--优化器
优化器Ⅰ.优化器的索引选择一些概念:优化器:选择SQL语句执行使用的索引,找到一个最优的执行方案,并用最小的代价去执行语句。优化器的执行代价:扫描行数、是否使用临时表、是否排序扫描行数扫描行数是根据统计信息来估算的一个数。统计信息指索引的区分度,一个索引上,不同的值的个数(基数[cardinality])越多,区分度就越好。基数是通过采样统计的,取N个数据页,统计基数,得到一个平均值,然后再乘以索引的页面数。当修改数据行超过一定阈值后,会自动触发重新统计一次基数。参数 innodb_sta原创 2020-10-27 15:41:48 · 381 阅读 · 0 评论 -
MySQL深度解析--锁
Ⅰ.MySQL中的锁1.全局锁概念对整个数据库实例加锁。让整个库处于只读状态。开启全局锁后,其他线程的数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句将被阻塞。命令(FTWRL)Flush tables with read lock 使用场景全库逻辑备份(对于使用了不支持事务引擎的表或库)使用FTWRL命令使全库进入只读状态,然后对整个库进行备份。防止备份过程中各表视图不一致的问题。存在的问题:如果你在主库上备份,那么在备份期间都不能执行更新原创 2020-10-26 14:39:59 · 170 阅读 · 0 评论 -
MySQL深度解析--索引
Ⅰ.索引索引的作用索引的出现就是为了提高查询效率,相当于数据的一个目录。索引的模型选择提高数据读写效率的模型主要有Hash、有序数组、搜索树。Hash 数据结构由Hash函数、数组和链表组成。在写入数据时可以直接找到对应位置存放数据,或者直接在对应位置链表后追加数据。写入效率高。但是查询的时候只有第一层数组的时候较快,如果同一个Hash位置有多个值组成的链表,那么就需要遍历该位置所有链表数据,在范围查询时效率低。所以Hash只适用于只有等值查询的场景,比如NoSQL引擎。有序数组中所有元素都是原创 2020-10-26 10:48:08 · 191 阅读 · 0 评论 -
MySQL深度解析--事务隔离级别
MySQL事务隔离Ⅰ.四种隔离级别1.读未提交一个事务还没提交时,它做的变更就能被别的事务看到。2.读已提交一个事务提交之后,它做的变更才会被其他事务看到。3.可重复读一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。4.串行化顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。Ⅱ.隔离机制分析读未提交直接返回记原创 2020-10-23 16:13:05 · 553 阅读 · 0 评论 -
MySQL深度解析---日志系统
一、日志系统redo log (重做日志)1.功能作用InnoDB引擎特有的日志,用来临时的记录数据库的更新操作。记录的是“在某个数据页上做了什么修改”。2.原理解析redo log 是物理日志,它分为两部分,一部分是在内存中的日志缓冲redo log buffer,另一部分是在磁盘上的重做日志文件 redo log file。而每次把日志从内存持久化到磁盘都需要经过操作系统内核空间os buffer 并且调用一次操作系统的fsync()操作,调用fsync()的作用就是将OS buffer中的日原创 2020-10-23 15:20:37 · 502 阅读 · 0 评论 -
MySQL深度解析----基础架构
一、MySQL基础架构大体来说MySQL可分为Server层和存储引擎层1、Server层Server层包含了所有跨存储引擎的功能,比如存储过程、触发器、视图、还有所有内置函数(如日期、时间、数学等),此外Server层还包含了几个重要的组件,下面会逐个介绍它们的功能。连接器功能和客户端 建立连接、获取权限、维持和管理连接。特点在连接建立时一次性的获取权限,之后 此连接的权限都将取决于建立连接时获取的权限。常用命令mysql -h$ip -P$port -u$user -p --建原创 2020-10-22 14:37:11 · 261 阅读 · 0 评论