
0601【Mysql】读书笔记分享
包含书籍《Mysql高性能书籍3》、《Mysql技术内幕》
努力的阳光蓝孩
学习一时爽,一直学习一直爽
展开
-
【MySQL】基础篇
1 MySQL 简介1 简介2 什么是数据库3 RDBMS 属于4 MySQL 数据库的特点2 MySQL 安装1 Linux Windows Mac 上安装1、检查# rpm -qa | grep mysqlrpm -e mysql // 普通删除模式rpm -e --nodeps mysql // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除2、安装MySQLwget http://repo.mysql.com/m原创 2020-11-25 10:01:48 · 224 阅读 · 0 评论 -
[MySQL基础] 01 MySQL简介
一、MySQL 简介1、MySQL 是流行的关系型数据库管理系统,在 互联网 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。2、什么是数据库?A: 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。B: 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。C: 使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量原创 2020-10-22 08:16:53 · 138 阅读 · 0 评论 -
【MySql】13 如何正确删除表数据、收回表空间
一、数据库占用空间太大,我把一个最大的表删掉了一半的数据,为什么表文件的大小还是没变?1、一个InnoDB表包含两部分:表结构定义和数据2、MySQL 8.0 版本以前,表结构是存在以.frm 为后缀的文件里。3、MySQL 8.0版本,已经允许把表结构定义放在系统数据表中了,因为表结构定义占用的空间很小。二、参数 innodb_file_per_table1、表数据既可以存在共享表空间里,也可以是单独的文件,是由参数innodb_file_per_table 控制的。参数设置为 OFF:原创 2020-07-14 09:16:22 · 1154 阅读 · 0 评论 -
【MySql】 12 SQL 语句变“慢”的原因
一、脏页、干净页1、脏页:当内存数据页跟磁盘数据页内容不一致2、干净页:内存数据写 入到磁盘后,内存和磁盘上的数据页的内容就一致3、flush 操作: 把内存里的数据写入磁盘的过程二、InnoDB 引擎下 什么时候会触发flush 操作1、 InnoDB的redo log写满: 系统会停止所有更新操作, 把 checkpoint 往前推进,redo log 留出空间可以继续写2、淘汰“脏页”: 系统内存不足。当需要新的内存页,而内存不够用的时候,就要淘 汰一些数据页,空出内存给别的数据页使用 =原创 2020-07-14 09:15:29 · 207 阅读 · 0 评论 -
【MySql】11 笔记给字符串字段加索引
一、背景知识1、系统支持邮箱登录,如何在邮箱这样的字段上建立合理的索引?2、用户名登陆> create table User (id bigint unsigned primary key,email varchar(64),...) engine=innodb;3、查询语句> select f1, f2 from User where email='XXX';4、如果 email 这个字段上没有索引,那 么这个语句就只能做全表扫描。5、MySQL 是支持前缀索引的,创原创 2020-07-13 09:21:42 · 251 阅读 · 0 评论 -
【MySql】10 笔记 MySQL 执行选错索引
一、问题1、一条本来可以执行得很快的语句,却由于 MySQL 选错 了索引,而导致执行速度变得很慢?2、例子建表> CREATE TABLE 't'(`id` int(11) NOT NULL,`a` int(11) DEFAULT NULL,`b` int(11) DEFAULT NULL,PRIMARY KEY(`id`),KEY `a`(`a`),KEY `b`(`b`)) ENGINE=InnoDB;插入数据delimiter;;create pr原创 2020-07-12 23:38:53 · 143 阅读 · 0 评论 -
【Mysql】09 笔记 普通索引和唯一索引区别
一、查询过程1、select id from T where k=5 id = 500 value = R3普通索引来说,查找到满足条件的第一个记录后,需要查找下一个记录,直到碰到第一个不满足k=5条件的记录。唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。InnoDB 的数据是按数据页为单位来读写的。也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位,将其整体读入内存。在 InnoDB 中,每个数据页的大小默原创 2020-07-10 09:26:30 · 120 阅读 · 0 评论 -
【MySql】08 笔记 事务是隔离的还是不隔离的
一、问题1、一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能操作,会被锁住,进入等待状态。问题是,既然进入了等待状态,那么等到这个事务自己获取到行锁要更新数据的时候,它读到的值是什么?create table `t`(`id` int(11) NOT NULL,`k` int(11) DEFAULT NULL,primary key(`id`)) ENGINE = InnoDB;insert into t(id, k) values(1,1),(2,2);事原创 2020-07-08 23:15:34 · 232 阅读 · 0 评论 -
【MySql】07 笔记 Mysql 并发场景下的锁
一、行锁的介绍1、行锁就是针对数据表中行记录的锁。这很好理解,比如事务 A 更新了一行,而这时候事务B也要更新同一行,则必须等事务 A 的操作完成后才能进行更新。2、MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁,InnoDB 是支 持行锁的。二、两阶段锁1、例子 分析A 的拿锁情况,锁释放时间?事务A事务Bbegin;update t set k=k+1 where id = 1;updat原创 2020-07-08 08:14:11 · 170 阅读 · 0 评论 -
【MySql】06 笔记 Mysql 并发场景下的锁
一、介绍1、出现并发访问的时候,锁就是用来实现这些访问规则的重要数据结构。2、根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类二、全局锁1、全局锁就是对整个数据库实例加锁。2、MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。3、全局锁的典型使用场景是,做全库逻辑备份需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数 据定义语句(包括建原创 2020-07-07 23:29:54 · 174 阅读 · 0 评论 -
【MySql】05 笔记 索引
一、索引例子分析1、select * from T where k between 3 and 5 执行几次搜索树?会扫描多少行?> create table T(ID int primary key,k int NOT NULL DEFAULT 0,s varchar(16) NOT NULL DEFAULT '',index k(k)) engiine> insert into T values(100, 1, 'aa'),(101, 2, 'ab'),(102, 3, 'a原创 2020-07-07 09:26:00 · 113 阅读 · 0 评论 -
【MySql】04 笔记 索引
一、介绍1、为什么需要索引?索引的出现是为了提高数据查询的效率二、索引的常见模型1、哈希表哈希表是一种以键-值(key-value)存储数据的结构,只要输入待查找的值即key,就可以找到其对应的值即 Value。哈希的思路:把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置哈希表增加数据是通过一种哈希运行,先算出位置,然后在数组中添加。所以增加数据快,因为不是有序的所以哈希索引做区间查询的速度是很慢的。哈希表结构:原创 2020-07-05 18:55:53 · 114 阅读 · 0 评论 -
【MySql】03 笔记 事务隔离
一、介绍1、,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL中,事务支持是在引擎层实现的。2、,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。如 MySQL原生的 MyISAM 引擎就不支持事务。二、隔离性与隔离级别1、 ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)2、隔离级别数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读原创 2020-07-05 17:07:16 · 187 阅读 · 0 评论 -
【MySql】02 笔记 一条SQL更新语句做了那些事情?
一、介绍1、更新流程和查询流程类似客户端清空缓冲分析器执行器更新二、更新流程两个重要的日志模块1、为什么需要日志模块?如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过 IO 成本、查找成本都很高。2、redo log(重做日志)WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成原创 2020-07-05 12:51:26 · 129 阅读 · 0 评论 -
【MySql】01 笔记 一条SQL查询 做了些什么事情?
一、介绍1、学了两三年MySql的人我尽然不知道他的发音和全名The official way to pronounce “MySQL” is “My Ess Que Ell” (not “my sequel”), but we do not mind if you pronounce it as “my sequel” or in some other localized way.二、分析SQl1、Mysql 可以分为 Server 层和 存储引擎层两部分Server 层包括连接器、查询原创 2020-07-05 11:56:51 · 137 阅读 · 0 评论 -
【Msql阅读笔记】| 四、InnoDB存储引擎之Checkpoint技术
一、为什么需要Checkpoint技术1、数据新页每次当页发生变化,就将新页的版本刷新到磁盘,那么这个开销是非常大的。2、从缓冲池中将页的新版本刷新到磁盘时发生了宕机,那么数据就不能恢复。3、为了避免数据丢失问题、数据库事务采用了Write Ahead Log策略,宕事务提交时,先写重做日志,再修改页。4、数据发生丢失时可以通过重做日志完成数据的恢复 ==> 事务ACID 中的D(Durability持久性)的要求二、Checkpoint技术可以解决的痛点1、缩短数据库的恢复时间2、缓冲原创 2020-06-09 09:19:01 · 189 阅读 · 0 评论 -
【Mysql学习】笔记三、InnoDB存储引擎体系架构分析
一、介绍1、所看书籍《Mysql技术内幕》2、操作数据库版本8.03、innoDb是一个高性能、高可用、高扩展的存储引擎。二、:InnoDB内存池负责描述:InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池负责:1、维护所有进程/线程需要访问的对歌内部数据结构2、缓存磁盘上的数据,方便快速地读取,同时在对磁盘文件的数据修改之前在这里缓存3、重做日志(redo log)缓冲4、后台线程的主要作用是负责刷新内训池中的数据,保证缓冲池中的内存缓冲的是最近的诗句。将已经修改原创 2020-06-08 09:11:17 · 411 阅读 · 0 评论 -
【Mysql学习】笔记二、读写锁(锁粒度)、事务隔离级别
二、读写锁(锁粒度)1、共享锁=读锁:互不干扰、相互不阻塞,多个客户在同一时刻可以同时读取同一个资源。2、排他锁=写锁:一个写锁会阻塞其他的写锁和读锁。出于安全考虑,确保在给定的时间里只有一个用户能执行写入,并防止其他用户读取正在写入的同一资源。锁问题:锁的各种操作,包括获得锁、检查锁是否已经解除、释放锁等都会增加系统的开销。如果系统花大量的时间来管理锁,而不是读取数据,那么系统的性能可能会因此收到影响。锁定的数量越少,系统的并发程度越高,只要相互之间不发生冲突。表锁:基本的锁策略,并.原创 2020-06-07 22:07:38 · 244 阅读 · 0 评论 -
【Mysql学习】笔记一、架构图基本了解
一、架构图二、说明1、最上层:链接处理、授权认证、安全等2、第二层:大多数的核心服务(查询解析、分析、优化、缓存以及所有的内置函数)函数(日期、时间、数学、加密函数)跨存储引擎的功能都在这一层实现:存储过程、触发器、视图3、第三层:存储引擎负责数据的存储和提取,通过API与存储引擎进行通信。不通引擎之间也不会相互通信,只是简单地响应上层服务的请求。1、连接管理与安全性认证基于用户名、原始主机信息和密码,认证成功会继续验证是否具有执行某个特定的查询权限。2、优化与执行3、并发控制:多个查询原创 2020-06-07 22:06:21 · 130 阅读 · 0 评论 -
Mysql学习笔记笔记一、Mysql与Java字段对应
Mysql java BIGINT LONG INT INT VARCHAR String ...原创 2020-05-22 20:46:36 · 158 阅读 · 0 评论