摘要: 事务执行过程中遇到意外或者手动通过rollback语句执行 回滚 操作,需要记录 撤销日志 ,即:undo日志,只有在一个事务第一次执行 增、删、改 操作时才会为该事务分配一个 事务id,在MySQL5.5之前undo日志是记录在系统表空间(MySQL数据目录下的ibdata1就是系统表空间),长事 阅读全文
posted @ 2020-10-08 23:58 摩诃、 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 14.1 问题的提出 对数据库的操作都是以 页 为单位加载到 buffer pool操作的,防止故障引起数据丢失,保证 持久性 如果每次提交事务都将页面刷到磁盘,会有两个问题。一是事务操作的页面可能并不相邻,随机I/O。二是InnoDB以页为单位进行磁盘I/O,即使只修改一个字段。只需要把修改的数据 阅读全文
posted @ 2020-10-08 23:57 摩诃、 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 表空间 是文件系统上一个或者几个文件抽象,每个文件划分出多个页,当访问数据时,即使只有一条也会把整个数据加载到内存,访问之后 缓存 一段时间,当再次请求时就可以省去I/O开销 # 在配置文件中配置Buffer Pool大小,单位是字节,不配置默认128M,最小值是5M [server] innodb 阅读全文
posted @ 2020-10-08 23:52 摩诃、 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 数据库事务是一组完整的行为,如果成功全部成功,失败则全部失败。缺点是在事务中,不能根据前置条件决定是否向下执行(事务可切分)。 12.1 事务特性 在OLTP数据库中强调 强一致性 因此提出了ACID原则 原子性(Atomicity): 事务中的所有操作为一个完整的整体,不可拆分 一致性(Consi 阅读全文
posted @ 2020-10-08 23:50 摩诃、 阅读(131) 评论(0) 推荐(0) 编辑
摘要: MySQL经过 基于成本 和 基于规则 的优化后生成 执行计划 ,通过在语句前面加上Explain关键字可以查看执行计划: 列名描述 id 在一个大的查询语句中每个SELECT关键字都对应一个唯一的id select_type SELECT关键字对应的那个查询的类型 table 表名 partiti 阅读全文
posted @ 2020-10-08 23:48 摩诃、 阅读(179) 评论(0) 推荐(0) 编辑
摘要: MySQL优化器会依据一些规则在执行前将语句进行优化,这个过程叫 语句重写 移除不必要的括号 某列和能够确定值的变量比较,直接替换为常量 移除永真式和永假式 计算常量表达式,索引列最好单独出现在表达式 如果没有聚集函数以及分组条件,查询优化器会将HAVING和WHERE子句合并 表中只有一条记录or 阅读全文
posted @ 2020-10-08 23:46 摩诃、 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 在语句执行之前,MySQL查询优化器会找出执行该语句所有可能的方案,对比找到成本最低的方案,该方案叫 执行计划 成本主要分为两种: I/O成本:以 页 为单位将数据和索引从 磁盘 加载到 内存 的成本,默认规定读取一个页面的成本是1.0 CPU成本:从内存读取记录并检测搜索条件、对结果集进行排序等操 阅读全文
posted @ 2020-10-08 23:44 摩诃、 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 8.1 单表访问 全表扫描 使用索引查询 针对主键或唯一二级索引等值查询 针对普通二级索引等值查询 针对索引列范围查询(in子句 也可以划分为范围查询) 扫描整个索引列 即使访问通过索引列查询数据,也不一定会使用索引,当MySQL优化器判断查询二级索引+回表的代价比全表扫描小的时候才会使用索引,如果 阅读全文
posted @ 2020-10-08 23:42 摩诃、 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 二级索引 以 B+树 形式保存在表空间(表名.ibd 文件),InnoDB为不同的页面设置的了不同的类型。这些类型记录在每个页面头部的 FIL_PAGE_TYPE位(两字节) 以 页 为单位分配和存储数据,在 B+树 的每一层节点间形成的双向链表间的 物理位置 可能会很远,大量的 随机I/O 会降低 阅读全文
posted @ 2020-10-08 23:40 摩诃、 阅读(115) 评论(0) 推荐(0) 编辑
摘要: InnoDB、MyISAM存储引擎最终数据都会存储到文件系统中的某个目录,这个目录就是 数据目录 (和MySQL安装目录不一定在一起)。 # 查找数据目录地址SHOW VARIABLES LIKE 'datadir'; 每次创建数据库都会在 数据目录 创建一个和数据库名相同的子目录(文件夹),Inn 阅读全文
posted @ 2020-10-08 23:37 摩诃、 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 5.1 关于索引的结论: 每个索引对应一颗 B+树(一种多叉树,一般最大四层,每个内节点的分叉大约1200左右),用户记录存储在 叶子节点 ,目录项记录 (每个用户记录的页的最小项称为目录项)存储在 内节点(非叶子节点) InnoDB引擎 自动将数据以为主键为 聚集索引 建立 B+树 索引结构,也就 阅读全文
posted @ 2020-10-08 23:35 摩诃、 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 在MySQL中索引的数据结构都采用B+树结构,在InnoDB中则是根据主键作为聚集索引将数据直接存储为B+树结构(索引即数据),MyISAM中则是将数据和索引分开存储。 B+树是一颗多叉树,可将降低访问磁盘的次数,B+树数据存放在叶子节点并且通过双向链表关联,实现了数据库的范围查询 B树是一个多叉树 阅读全文
posted @ 2020-10-08 23:31 摩诃、 阅读(167) 评论(0) 推荐(0) 编辑
摘要: InnoDB表存储引擎以16KB(可以重新编译设置默认页大小为2的整数倍)为单位将数据划分为若干页,作为磁盘和内存交换数据的基本单位。 InnoDB引擎设计了4种行格式Compact、Redundant、Dynamic、Compressed;我们可以在创建或者修改表的时候通过 ROW_FORMAT 阅读全文
posted @ 2020-10-08 23:23 摩诃、 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 启动项是mysql服务启动时传递过去的一些参数(可以通过命令行也可以通过配置文件),系统变量是影响服务器运行行为的变量 1.命令行指定配置项 只在首次启动生效 长参数使用 ”--下划线分割单词“ 的形式 短参数使用“-字母”的形式,且参数区分大小写 2.配置文件指定配置项 Linux环境下,按照下列 阅读全文
posted @ 2020-10-08 23:10 摩诃、 阅读(507) 评论(0) 推荐(0) 编辑
摘要: MySQL后台服务器进程默认名称mysqld,客户端名称mysql,mysqld_safe是一个启动脚本,间接调用mysqld还会启用监控进程产出日志。systemctl start mysqld.service 会调用mysqld_safe 连接管理、查询缓存、语法解析、查询优化这些逻辑层面的划分 阅读全文
posted @ 2020-10-08 23:00 摩诃、 阅读(465) 评论(0) 推荐(0) 编辑