没有合适的资源?快使用搜索试试~ 我知道了~
首页MySQL进阶指南:Java架构师必备的表结构与性能优化
MySQL进阶指南:Java架构师必备的表结构与性能优化
需积分: 5 1 下载量 17 浏览量
更新于2024-07-09
收藏 16.36MB PDF 举报
本资源是一份详尽的MySQL学习笔记,主要针对Java架构师所需的基础MySQL知识进行讲解。课程内容涵盖了MySQL的核心组件,如基础操作、表结构设计和数据类型优化,以及关键性能优化技巧,如高性能索引创建、InnoDB引擎底层解析和事务管理。课程特别强调在实际工作场景中的应用,例如如何合理设计表结构、优化SQL查询等,目标是提升Java架构师在数据库管理方面的技能。 MySQL版本众多,课程选择的是CentOS 7下的MySQL 5.7.32社区版本,尽管这是较旧版本,但所教授的知识点在MySQL 8中也大体适用。学习者可以通过官方文档深入理解,链接分别为《MySQL Reference Manual》和《MySQL Error Reference》。 课程强调的是作为Java架构师的实用技能,而非深入到数据库管理员(DBA)的角色,因此对于对MySQL不太熟悉的学员,建议先阅读一些入门书籍,如《数据库系统概念》、《数据库索引设计与优化》等,以建立起扎实的基础。对于希望成为MySQL DBA的学生,推荐研究更深层次的原理类书籍,如《数据库与事务处理》和《深入理解MySQL》系列,以及操作运维和源码相关的书籍,如《MySQL官方文档》和《MySQL性能调优与架构设计》。 此外,还提到了MySQL的一些分支和变种,如PerconaServer、MariaDB和Drizzle,这些都是在MySQL基础上发展起来的成熟变种,适合根据具体需求选择合适的版本或工具。 这份笔记旨在帮助Java架构师掌握MySQL的核心技能,以应对工作中常见的数据库挑战,并为有兴趣进一步深化MySQL知识的学生提供了一份全面的学习路径。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/30625987/bg10.jpg)
2.在该与数据库名同名的子目录下创建一个名为 db.opt 的文件,这个文件
中包含了该数据库的各种属性,比方说该数据库的字符集和比较规则是个啥。
比方说我们查看一下在我的计算机上当前有哪些数据库︰
可以看到在当前有 5 个数据库,其中 mysqladv 数据库是我们自定义的,其
余 4 个数据库是属于 MySQL 自带的系统数据库。我们再看一下数据目录下的内
容:
当然这个数据目录下的文件和子目录比较多,但是如果仔细看的话,除了
information_schema 这个系统数据库外,其他的数据库在数居目录下都有对应的
子目录。这个 information_schema 比较特殊,我们后面再讲它的作用。
表在文件系统中的表示
我们的数据其实都是以记录的形式插入到表中的,每个表的信息其实可以分
为两种:
1.表结构的定义
2.表中的数据
表结构就是该表的名称是啥,表里边有多少列,每个列的数据类型是啥,有
啥约束条件和索引,用的是啥字符集和比较规则各种信息,这些信息都体现在了
我们的建表语句中了。为了保存这些信息,InnoDB 和 MyIASM 这两种存储引擎
都在数据目录下对应的数据库子目录下创建了一个专门用于描述表结构的文件,
文件名是这样:表名.frm
![](https://csdnimg.cn/release/download_crawler_static/30625987/bg11.jpg)
比方说我们在 mysqladv 数据库下创建一个名为 test 的表:
那在数据库 mysqladv 对应的子目录下就会创建一个名为 test.frm 的用于描
述表结构的文件。这个后缀名为.fm 是以二进制格式存储的。
那表中的数据存到什么文件中了呢?在这个问题上,不同的存储引擎就产生
了有所不同,下边我们分别看一下 InnoDB 和 MyISAM 是用什么文件来保存表中
数据的。
lnnoDB 是如何存储表数据的
InnoDB 的数据会放在一个表空间或者文件空间(英文名: table space 或者 file
space)的概念,这个表空间是一个抽象的概念,它可以对应文件系统上一个或多
个真实文件〈不同表空间对应的文件数量可能不同)。每一个表空间可以被划分
为很多很多很多个页,我们的表数据就存放在某个表空间下的某些页里。表空间
有好几种类型。
系统表空间
(system tablespace)
这个所谓的系统表空间可以对应文件系统上一个或多个实际的文件,默认情
况下,InnoDB 会在数据目录下创建一个名为 ibdata1(在你的数据目录下找找看有
木有)、大小为 12M 的文件,这个文件就是对应的系纳表空间在文件系统上的表
示。
这个文件是所谓的自扩展文件,也就是当不够用的时候它会自己增加文件大
小,当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得
原来的 ibdata1 这个文件名难听,那可以在 MySQL 启动时配置对应的文件路径以
及它们的大小,我们也可以把系统表空间对应的文件路径不配置到数据目录下,
甚至可以配置到单独的磁盘分区上。
![](https://csdnimg.cn/release/download_crawler_static/30625987/bg12.jpg)
需要注意的一点是,在一个 MySQL 服务器中,系统表空间只有一份。从
MySQL5.5.7 到 MySQL5.6.6 之间的各个版本中,我们表中的数据都会被默认存储
到这个系统表空间。
独立表空间
(file-per-table tablespace)
在 MySQL5.6.6 以及之后的版本中,InnoB 并不会默认的把各个表的数据存储
到系统表空间中,而是为每一个表建立一个独立表空间,也就是说我们创建了多
少个表,就有多少个独立表空间。使用独立表空间来存储表数据的话,会在该表
所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相
同,只不过添加了一个.ibd 的扩展名而已,所以完整的文件名称长这样:表名.ibd。
比方说假如我们使用了独立表空间去存储 xiaohaizi 数据库下的 test 表的话,
那么在该表所在数据库对应的 xiaohaizi 目录下会为 test 表创建这两个文件:
test.frm 和 test.ibd
其中 test.ibd 文件就用来存储 test 表中的数据和索引。当然我们也可以自己
指定使用系统表空间还是独立表空间来存储数据,这个功能由启动参数
innodb_file_per_table 控制,比如说我们想刻意将表数据都存储到系统表空
间时,可以在启动 MySQL 服务器的时候这样配置:
[server]
innodb_file_per_table=0
当 imodb_file_per table 的值为 0 时,代表使用系统表空间;当 innodb_file per
table 的值为 1 时,代表使用独立表空间。不过 inmodb_file_per_table 参数只对
新建的表起作用,对于已经分配了表空间的表并不起作用。
其他类型的表空间
随着 MySQL 的发展,除了上述两种老牌表空间之外,现在还新提出了一些
不同类型的表空间,比如通用表空间(general tablespace) ,undo 表空间
(undotablespace)、临时表空间〈temporary tablespace)等。
MyISAM 是如何存储表数据的
在 MyISAM 中的数据和索引是分开存放的。所以在文件系统中也是使用不同
的文件来存储数据文件和索引文件。而且和 InnoDB 不同的是,MyISA 并没有什
么所谓的表空间一说,表数据都存放到对应的数据库子目录下。
test_myisam 表使用 MyISAM 存储引擎的话,那么在它所在数据库对应的
xieotaizi 目录下会为 myisam 表创建三个文件:
![](https://csdnimg.cn/release/download_crawler_static/30625987/bg13.jpg)
其中 test_myisam.MYD 代表表的数据文件,也就是我们插入的用户记录;
test_myisam.MYI 代表表的索引文件,我们为该表创建的索引都会放到这个文件
中。
1.2.3.3.
日志文件
在服务器运行过程中,会产生各种各样的日志,比如常规的查询日志、错误
日志、二进制日志、redo 日志、Undo 日志等等,日志文件记录了影响 MySQL
数据库的各种类型活动。
常见的日志文件有:错误日志(error log)、慢查询日志(slow query log)、
查询日志(query log)、二进制文件(bin log)。
错误日志
错误日志文件对 MySQL 的启动、运行、关闭过程进行了记录。遇到问题时
应该首先查看该文件以便定位问题。该文件不仅记录了所有的错误信息,也记录
一些警告信息或正确的信息
用户可以通过下面命令来查看错误日志文件的位置:
show variables like 'log_error'\G;
当 MySQL 不能正常启动时,第一个必须查找的文件应该就是错误日志文件,
该文件记录了错误信息。
慢查询日志
慢查询日志可以帮助定位可能存在问题的 SQL 语句,从而进行 SQL 语句层面
的优化,具体的使用我们以后再说。
查询日志
查询日志记录了所有对 MySQL 数据库请求的信息,无论这些请求是否得到
了正确的执行。
默认文件名:主机名.log
![](https://csdnimg.cn/release/download_crawler_static/30625987/bg14.jpg)
从 MySQL 5.1 开始,可以将查询日志的记录放入 mysql 架构下的 general_log
表
二进制日志(
binlog
)
二进制日志记录了对 MySQL 数据库执行更改的所有操作,若操作本身没有
导致数据库发生变化,该操作可能也会写入二进制文件。但是不包括 select 和
show 这类操作(因为这些操作对数据本身不会进行修改)
二进制日志的几种作用:
恢复(recovery):某些数据的恢复需要二进制日志,例如,在一个数据库
全备文件恢复后,用户可以通过二进制文件进行 point-in-time 的恢复
复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一
台远程的 MySQL 数据库(一般称为 slave 或 standby)与一台 MySQL 数据库(一
般称为 master 或 primary)进行实时同步
审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有
对数据库进行注入的攻击
log-bin 参数
该参数用来控制是否开启二进制日志,默认为关闭
如果想要开启二进制日志的功能,可以在 MySQL 的配置文件中指定如下的
格式:
“name”为二进制日志文件的名称
如果不提供 name,那么数据库会使用默认的日志文件名(文件名为主机名,
后缀名为二进制日志的序列号),且文件保存在数据库所在的目录(datadir 下)
--启用/设置二进制日志文件(name 可省略)
log-bin=name;
配置以后,就会在数据目录下产生类似于:
bin_log.00001 即为二进制日志文件;bin_log.index 为二进制的索引文件,用
来存储过往产生的二进制日志序号,通常情况下,不建议手动修改这个文件。
二进制日志文件在默认情况下并没有启动,需要手动指定参数来启动。开启
这个选项会对 MySQL 的性能造成影响,但是性能损失十分有限。根据 MySQL 官
方手册中的测试指明,开启二进制日志会使性能下降 1%。
剩余295页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
Eric597247
- 粉丝: 3
- 资源: 17
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 中国微型数字传声器:技术革新与市场前景
- 智能安防:基于Hi3515的嵌入式云台控制系统设计
- 手机电量低时辐射真增千倍?解析手机使用谣言
- 56F803型DSP驱动的高精度大功率超声波电源控制策略研究
- ARM与GPRS结合的远程监测系统设计
- GPS与RFID技术结合的智能巡检系统设计
- CPLD驱动的低功耗爆炸场温度测试系统设计
- 基于FPGA的智能驱动控制系统:可扩展设计与工业网络协议
- 基于ATmega128和CH374的嵌入式USB接口设计
- 基于AT89C52的温度补偿超声波测距仪:高精度设计与应用
- MSP430F448单片机在交流数字电压表中的应用
- 提升变频器应用效率的12项实用技巧
- STM32F103在数字电镀电源并联均流系统中的应用
- PSpice仿真下的升压开关电源设计:拓扑分析与CCM稳定性提升
- 轻巧高效:MSP430主导的低成本无线传感器网络节点设计
- FPGA在EDA/PLD中实现LVDS接口的应用解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)