MySQL学习笔记1.0

MySQL DBA | OCP 1z0-908 备考攻略 MySQL 1Z0-908是Oracle官方的MySQL 8.0数据库管理员认证考试,涵盖数据库安装配置、管理、高可用性、性能优化、安全管理和故障诊断六大核心领域。考试为120分钟73道选择题,重点考察实际管理能力,包括InnoDB集群部署、SQL优化、安全加固等。典型考题涉及系统数据库结构、集群元数据操作、函数索引优化及Linux权限安全等场景,要求考生掌握MySQL 8.0的核心管理技术。备考需注意多选题型占比高,建议通过Oracle官网注册考试并准备双证件参加线下测试。 阅读详情

1.两种日志(binlog 和 redo log)

1.这两种日志有以下三点不同。redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
2.redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑。
3.redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

为了保证数据库的一致性,必须要保证2份日志一致,因此使用的两阶段式提交。

2.事务隔离

    SQL 标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )。

  • 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。
  • 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。
  • 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
  • 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

3.索引

    在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。又因为前面我们提到的,InnoDB 使用了 B+ 树索引模型,所以数据都是存储在 B+ 树中的。
    根据叶子节点的内容,索引类型分为主键索引和非主键索引。主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。

覆盖索引、最左前缀原则、索引下推

4.表级锁

    MySQL 里面表级别的锁有两种:一种是表锁,一种是元数据锁(meta data lock,MDL)。
    MDL 不需要显式使用,在访问一个表的时候会被自动加上。MDL 的作用是,保证读写的正确性在 MySQL 5.5 版本中引入了 MDL,当对一个表做增删改查操作的时候,加 MDL 读锁;当要对表做结构变更操作的时候,加 MDL 写锁。

  • 读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。
  • 读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。因此,如果有两个线程要同时给一个表加字段,其中一个要等另一个执行完才能开始执行。

5.普通索引和唯一索引

    普通索引和唯一索引应该怎么选择?
    其实,这两类索引在查询能力上是没差别的,主要考虑的是对更新性能的影响。实际使用中,普通索引和 change buffer 的配合使用,对于数据量大的表的更新优化还是很明显的。

6.索引选择异常

索引选择异常和处理:

    对于由于索引统计信息不准确导致的问题,可以用 analyze table 来解决。

    而对于其他优化器误判的情况:
    1.采用 force index 强行选择一个索引。
    2.考虑修改语句,引导 MySQL 使用我们期望的索引。
    3.在有些场景下,可以新建一个更合适的索引,来提供给优化器做选择,或删掉误用的索引。

7.给字符串字段加索引

    1.使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。但使用前缀索引就无法使用覆盖索引对查询性能的优化,这也是在选择是否使用前缀索引时需要考虑的一个因素。

    2.总结:

  • 直接创建完整索引,这样可能比较占用空间;
  • 创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引;
  • 倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题;
  • 创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,跟第三种方式一样,都不支持范围扫描。

8.数据库表的空间回收

    一个 InnoDB 表包含两部分,即:表结构定义和数据。表结构定义占用的空间很小,主要考虑表数据的空间回收。

    表数据既可以存在共享表空间里,也可以是单独的文件。这个行为是由参数 innodb_file_per_table 控制的:
    这个参数设置为 OFF 表示的是,表的数据放在系统共享表空间,也就是跟数据字典放在一起;
    这个参数设置为 ON 表示的是,每个 InnoDB 表数据存储在一个以 .ibd 为后缀的文件中。
    从 MySQL 5.6.6 版本开始,它的默认值就是 ON 了。我建议你不论使用 MySQL 的哪个版本,都将这个值设置为 ON。因为,一个表单独存储为一个文件更容易管理,而且在你不需要这个表的时候,通过 drop table 命令,系统就会直接删除这个文件。而如果是放在共享表空间中,即使表删掉了,空间也是不会回收的。
    如果要收缩一个表,只是 delete 掉表里面不用的数据的话,表文件的大小是不会变的,还要通过 alter table 命令重建表,才能达到表文件变小的目的。

9.count()函数

    count(*)、count(主键 id) 和 count(1) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。

  • 对于 count(主键 id) 来说,InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断是不可能为空的,就按行累加。
  • 对于 count(1) 来说,InnoDB 引擎遍历整张表,但不取值。server 层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。单看这两个用法的差别的话,count(1) 执行得要比 count(主键 id) 快。因为从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。
  • 对于 count(字段) 来说:如果这个“字段”是定义为 not null 的话,一行行地从记录里面读出这个字段,判断不能为 null,按行累加;如果这个“字段”定义允许为 null,那么执行的时候,判断到有可能是 null,还要把值取出来再判断一下,不是 null 才累加。
  • 但是 count( * ) 是例外,并不会把全部字段取出来,而是专门做了优化,不取值。count ( * ) 肯定不是 null,按行累加。
        按照效率排序的话,count(字段)<count(主键 id)<count(1)≈count( * ),所以建议尽量使用 count( * )。

10.随机查询数据

    如果直接使用 order by rand(),这个语句需要 Using temporary 和 Using filesort,查询的执行代价往往是比较大的。所以,在设计的时候你要尽量避开这种写法。在实际应用的过程中,比较规范的用法就是:尽量将业务逻辑写在业务代码中,让数据库只做“读写数据”的事情。

11.函数操作

对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。同时,隐式类型转换,隐式字符编码转换,也会要求在索引字段上做函数操作而导致了全索引扫描。

12.binlog 的三种格式

    一种是 statement,一种是 row。还有一种 mixed,其实它就是前两种格式的混合。
    当 binlog_format=statement 时,binlog 里面记录的就是 SQL 语句的原文。
    当 binlog_format 使用 row 格式的时候,binlog 里面记录了真实修改行的数据。
    因为有些 statement 格式的 binlog 可能会导致主备不一致,所以要使用 row 格式。但 row 格式的缺点是,很占空间。比如你用一个 delete 语句删掉 10 万行数据,用 statement 的话就是一个 SQL 语句被记录到 binlog 中,占用几十个字节的空间。但如果用 row 格式的 binlog,就要把这 10 万条记录都写到 binlog 中。这样做,不仅会占用更大的空间,同时写 binlog 也要耗费 IO 资源,影响执行速度。所以,MySQL 就取了个折中方案,也就是有了 mixed 格式的 binlog。mixed 格式的意思是,MySQL 自己会判断这条 SQL 语句是否可能引起主备不一致,如果有可能,就用 row 格式,否则就用 statement 格式。也就是说,mixed 格式可以利用 statment 格式的优点,同时又避免了数据不一致的风险。

修改mysql locahost或者127.0.0.1弱密码问题 这将显示与 root 用户关联的主机、用户名以及加密后的认证字符串(密码)。列中存储的是经过哈希加密后的密码,而不是原始密码。 阅读详情

相关推荐

无网环境也能玩转DBeaver?手把手教你离线安装与ClickHouse连接(附实测jar包)

本文详细介绍了在无网环境下如何离线安装DBeaver并配置ClickHouse连接的完整指南。通过准备必备工具如DBeaver安装包、ClickHouse JDBC驱动及Maven本地仓库,确保在物理隔离环境中实现数据库管理。文章包含详细的安装步骤、驱动配置和性能优化建议,帮助开发者在严格网络限制下高效工作。

weixin_42635064的博客 375

MySQL0-1学习笔记-持续更新

MySQL简介: 是一种流行的关系型数据库管理系统,它被广泛用于各种应用程序中存储和管理数据。从 官方网站下载适合自己操作系统的安装包进行安装和配置。 可以在不同的操作系统上进行安装,比如 Windows、Linux 和 macOS 。下面主要展开介绍Windows安装相关知识点:① 运行安装程序,根据向导进行操作,选择安装类型(例如典型安装、完全安装、自定义安装): 典型安装(Typical):会安装 的最常见组件和功能,适合大多数普通用户。 完全安装(Complete):安装所有的组件和功能,包括一

qq_34955034的博客 1800

pentaho-kettle依赖拉取失败?试试这个Maven仓库配置的终极解决方案

本文详细解析了Pentaho Kettle依赖拉取失败的常见原因,并提供了三种Maven仓库配置方案,包括基础pom.xml配置、全局settings.xml设置以及企业级私有镜像仓库搭建。通过实战验证的方法和常见问题排查指南,帮助开发者彻底解决pentaho-kettle依赖问题,提升项目构建效率。

weixin_30275415的博客 203

《mysql--学习笔记-1.0》

自己记录的一些知识点。 -- mysql学习笔记 --关系型数据库 数据表简单操作 -- 使用终端操作 1.如何登陆数据库 终端进入 /usr/local/mysql/bin/mysql -u root -p hsy990617 1.mysql退出三种方法: mysql > exit; mysql > quit; mysql > \q; 2.如何查询数据库服务器所有的的...

weixin_45540964的博客 279

5G NR PDCCH实战解析:从DCI格式到CORESET配置的完整指南

本文深入解析5G NR PDCCH的实战配置,涵盖DCI格式选择、CORESET配置及Search Space优化等关键内容。基于3GPP R16标准,提供现网部署中的典型问题解决方案,如覆盖边缘失步、多用户调度冲突等,帮助提升控制信令传输效率。特别针对5G NR PDCCH的灵活资源分配和自适应编码机制进行详细探讨。

weixin_29231263的博客 498

小红书图文AI创作:输入主题,一键生成图文(coze工作流教程+获取)

输入主题,工作流一键生成小红书风格图文,30s一条,可批量生成

2301_79384090的博客 2799

B站MySQL8.0学习笔记(1)语句

B站黑马程序员视频 MySQL8.0 的学习笔记1

ZANLI的专栏 211

PyTorch深度学习实战(36)——Pix2Pix详解与实现

Pix2Pix 是基于生成对抗网络的图像转换框架,能够将输入图像转换为与之对应的输出图像,能够广泛用于图像到图像转换的任务,如风格转换、图像修复、语义标签到图像的转换等。Pix2Pix 的核心思想是通过对抗训练将输入图像和目标输出图像进行配对,使生成网络可以学习到输入图像到输出图像的映射关系。在本节中,将学习使用 Pix2Pix 根据给定轮廓生成图像。

盼小辉丶的博客 1万+

MySQL 学习笔记1.0 基础服务架构

MySQL 5.0架构图 1. 连接层 最上层是一些客户端和连接服务,主要是完成一些类似与连接处理、授权认证及相关的安全方案。 在该层上引入连接池概念,为认证安全接入的客户端提供线程。 同样在该层上可以实现基于SSL的安全连接。服务端也会安全接入每个客户端验证它所具有的操作权限。 2. 服务层 第二层架构主要完成大多核心服务,如SQL接口,并完成缓存的查询,SQL的分析与优化,以及部分内置函数的...

qq_41923058的博客 132

手把手教你如何在应用宝的Android模拟器安装第三方应用方法

通过上述步骤,你就能在腾讯应用宝模拟器中安装并运行本地的第三方APK应用了。虽然稍显繁琐,但操作起来并不复杂,只要按照步骤一步步做,就能顺利完成。希望这篇文章能帮助到遇到类似问题的你!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 7212

银河麒麟V10等保加固清单:安全基线配置一篇搞定(附逐项检查表)

通过限制使用SSH直接以root身份登录,禁用公钥登录的方式加强SSH服务的安全性。更改SSH默认端口可在一定程度上防止被黑客使用大批量扫描方式攻击。通过修改SSH的配置文件限制可以使用SSH服务远程管理的主机。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 817

mysql8.0.15学习笔记1

推荐安装教程: 网上搜教程,有两种类型,作为ZIP文件,还要自己配置文件,我觉得很麻烦,就选择的第二种,msi文件安装,我建议大家安装的时候,多搜一下教程,选择自己想要安装的方式。 基本操作: 这里要注意,mysql里一定要以;或者\g结尾。 数据库和数据库对象l 1.数据库分为系统数据库和用户数据库,系统数据库如下图所示,用户数据库是用户自己创建的数据库; 2.创建数据库 语法...

shinhwa96的博客 590

深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?

首先介绍 AI 时代 Java 开发框架选择背景,接着对比两者功能特性(Spring AI 的生态集成与标准化设计、LangChain4j 的多模型适配与提示工程)、应用场景(企业级系统改造与创新产品开发)、开发体验(学习成本与调试工具)、生态扩展(Spring 商业支持与 LangChain4j 开源社区)、性能安全(企业级优化与自主安全实现)及成本趋势(短期投入、长期回报与技术演进),最后给出选型建议与混合架构方案。

博客 5445

MySQL数据库学习笔记1.0

一、mysql常用命令 1、查看当前所有数据库 show databases; 2、打开指定的库 use 库名 3、查看当前库的的所有表 show tables; 4、查看当前其它库的所有表 show tables from 库名; 5、创建表 create table 表名( 列名1 列类型, 列名2 列类型, …… 列名n 列类型 ); 6、查看表的结构 desc 表名; 7、查看服务器的版...

JOY兜兜的博客 621

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MySQL学习笔记 1.0

1. 更改表格  alter table table_name  add column column_name datatype 说明:增加一个列(没有删除某个栏位的语法。 alter table table_name  add primar

feng991254的专栏 462

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MySql8.0学习笔记(1)—— select,where,order_by,limit

文章目录简介Selectwhereorder by 简介 Mysql版本为8.0,在windows下进行学习。 Select 以sql_store.customers的表为例 选择数据库中一张表的所有内容 SELECT * //为了方便理解,所有子句都换行, FROM sql_store.customers; 通过条件判定并排序(默认是升序) use sql_store; sel...

qq_37863891的博客 2349

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

id 0e1union mysql,MySQL应知应会学习笔记

检索数据selectselect 列名 from 表;正则表达式SQL语句不区分大小写算法在处理SQL语句的时候,空格是忽略的。sqlLIMIT限制结果 只会输出若干条,例如:SELECT 列名 FROM 表 LIMIT 5;数据库返回很少于5行,有助于性能提高。安全LIMIT 5,5; 返回从行5开始的5行,新版本的LIMIT 5 OFFSET 5;函数排序检索数据性能ORDER BY指定排序方...

weixin_42509398的博客 84

《MySQL与MariaDB学习指南》学习笔记1.0

mysql入门学习笔记

weixin_37144144的博客 612

21mysql体系结构-各个模块介绍

关于mysql5710设置root初始化密码问题 mysql-proxymake时出错 mysql51简体中文官方手册已发布及打包下载已解决升级mysql从50升级到51的问题 mysql基本操作(学习笔记持续更新)http://lvyou.baidu.com/plan/1af799e5face1f8496206927 http://lvyou.baidu.com/plan/540ee0c5e4

hunanlzg的专栏 716

一千行 MySQL 学习笔记

腾出时间以后要根据下文链接整理这一千行MySQL学习笔记:https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485025&idx=1&sn=1f4e19fc77af28f6795feff6ce7465b9&chksm=cea249aaf9d5c0bc89a421c0759d27af3f55797a5...

JavaAlliance 665

【MySQL】MySQL客户端连接用 localhost和127.0.0.1的区别

# systemctl status mysqld # ss -tan | grep 3306 # mysql -V localhost与127.0.0.1的区别是什么? 相信有人会说是本地IP,曾有人说,用127.0.0.1比localhost好,可以减少一次解析。 看来这个入门问题还有人不清楚,其实这两者是有区别的。 一般设置程序时本地服务用localho...

michaelwoshi的博客 2935

MySQL 中 localhost 与 127.0.0.1 的区别

一家之言: localhost与127.0.0.1的区别 localhost与127.0.0.1的区别是什么?相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析。 看来这个入门问题还有人不清楚,其实这两者是有区别的。 no1: localhost也叫local ,正确的解释是:本地服务器 127.0.0.1在windows等系统的正确解释是:本机地址(...

weixin_33724059的博客 1703

Debian 9.1.0 安装 Mysql 8.0

Debian 9.1.0 安装 Mysql 8.0 首先添加MySQL Dev apt存储库 $ cd /tmp $ wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb $ sudo dpkg -i mysql-apt-config* 出现提示回车就可以,默认安装mysql8.0,当然也可以换成别的版本。 然后执行 $...

MK_chan的博客 3118

MySQL 8.0 OCP 1Z0-908 1-20题

B Innodb_log_file_size=1G //Innodb_log_file_size参数用于指定 InnoDB 重做日志文件(redo log files)的大小,当 innodb_log_file_size 增大后,日志文件可以容纳更多的日志数据。performance_schema.table_10_waits_summary_by_table表中可以查询某个表读写的总次数,以及读,写的次数,最小/最大/平均等待时间,FETCH可以简单理解为读取的次数,等待时间等。

数据库小学生 1706

MySQL上新:MySQL 9.1.0发布

MySQL 9.1.0创新版发布了

Tony.Dong的专栏 7714
上一篇: 消息队列学习笔记(二)
下一篇: MySQL学习笔记2.0
过河的小卒子
博客等级 码龄10年 39粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值