![](https://img-blog.csdnimg.cn/20210401102200583.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySql数据库
文章平均质量分 87
数据库的相关知识的学习
庄小焱
我是庄小焱,阿里巴巴Java高级工程师、PMP项目管理专家、系统架构设计师(高级)、CSDN博文专家。 博主在微服务、虚拟化、系统架构、大数据、机器学习领域不断学习,同时在博客中分享自己学习知识和相关技术, 欢迎大家和我交流学习,欢迎大家关注我的博客。
展开
-
MYSQL——数据库面试问题
本博文主要分享数据库在面试的常见的面试问题与解答,帮助大家快速的学习了解数据库的相关知识。帮助你更好的应对面试中的问题。原创 2021-04-08 18:43:18 · 1169 阅读 · 0 评论 -
MySQL——数据库知识脑图
主要给大家几张的个人总结的有关于Mysql知识脑图,帮助大家更好的学习和记忆相关内容。原创 2021-04-19 10:52:10 · 496 阅读 · 0 评论 -
MYSQL——数据库常SQL语法
摘要本博文主要介绍mysql中的数据苦中的SQL语句的实战,帮助大家在日常的学习中留下一个速查的笔记和学习的资料参考。一、SQL的关键字SQL中用很多关键字来表达CRUD的操作(增删改查)。在这之外有很多特殊的关键字用来表示一些其他的含义,在总结SQL之前我们有必要进行一些了解。类型 含义 实例 primary key 主键,后面括号中是作为主键的属 primary key(student_id) foregin key references 外键,括号原创 2021-12-28 23:00:13 · 1224 阅读 · 1 评论 -
MYSQL——数据库基础知识概述
数据库主要的是涉及到是:数据库的三范式、数据的的基本的查询的语句、数据库的存储引擎、数据库的层面的锁的相关知识、数据库的事务的相关知识。数据库的主从备份、数据库的集群系统以及分布式数据库集群MOngoDB的时候分布式数据库中的解决方法。数据库中分库分表的解决方案。等……数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎...原创 2020-05-08 13:04:30 · 777 阅读 · 1 评论 -
MySQL——表结构原理
数据库中表原创 2020-12-10 09:46:57 · 372 阅读 · 0 评论 -
MYSQL——系统架构与查询、更新原理
本博文介绍mysql底层架构和SQL语句执行流程的相关原理,让大家更好的理解数据库的执行,帮助同学在后续的优化设计提供一个思路。原创 2021-12-27 09:29:35 · 392 阅读 · 0 评论 -
MySQL——索引类型与InnoDB索引
在日常工作中会经常接触到。比如某一个 SQL 查询比较慢,分析完原因之后,你可能就会说给某个字段加个索引吧之类的解决方案。但到底什么是索引,索引又是如何工作的呢?一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本 500 页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那我估计你可得找一会儿。同样,对于数据库的表而言,索引其实就是它的“目录”。原创 2020-12-10 09:43:00 · 411 阅读 · 2 评论 -
MySQL——数据库锁原理
数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。例如,操作缓冲池中的LRU列表,删除、添加、移动LRU列表中的元素,为了保证一致性,必须有锁的介入。数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。人们认为行级锁总会增加开销。实际上,只有当实现本身会增加开销时,行级锁才会增加开销。InnoDB存储引擎不需要锁升级,因为一个锁和多个锁的开销是相同的。InnoDB存储引擎锁的实现和Oracle数据库非常类似,提供一致性的原创 2020-12-10 09:42:29 · 1321 阅读 · 0 评论 -
MYSQL——事务与隔离级别原理
事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。你现在知道,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。原创 2021-12-27 22:04:42 · 873 阅读 · 0 评论 -
MYSQL——索引设计原则
之前优化器选择使用索引 b,是因为它认为使用索引 b 可以避免排序(b 本身是索引,已经是有序的了,如果选择索引 b 的话,不需要再做排序,只需要遍历),所以即使扫描行数多,也判定为代价更小。但是,对于这个查询语句来说,如果你定义的 index2 不是 email(6) 而是 email(7),也就是说取 email 字段的前 7 个字节来构建索引的话,即满足前缀’zhangss’的记录只有一个,也能够直接查到 ID2,只扫描一行就结束了。其中,Q1 的结果还是符合预期的,rows 的值是 104620;原创 2021-12-28 22:02:11 · 1384 阅读 · 0 评论 -
MYSQL——数据的删除与重建原理
摘要很多同学经常遇到这样的问题:数据库占用空间太大,把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?在 MySQL 8.0 版本以前,表结构是存在以.frm 为后缀的文件里。而 MySQL 8.0 版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,一个 InnoDB 表包含两部分,即:表结构定义和数据。所以我们今天主要讨论的是表数据。一、参数 innodb_file_per_table表数据既可以存在共享表空间里,也可以是单独的文件。这个行为是由参数 i原创 2021-12-29 22:00:09 · 2994 阅读 · 0 评论 -
MySQL——SQL函数相关原理
Mysql的体系结构MySQL数据库的体系结构了,其结构如图所示(摘自MySQL官方手册)。可以发现,MySQL由以下几部分组成;连接池组件、管理服务工具组件、SQL接口组件、查询分析器组件、优化器组件、缓冲(Cache)组件、插件式存储引擎、物理文件。还可以发现,MySQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如 SQL分析器和优化器原创 2020-12-10 12:10:20 · 458 阅读 · 0 评论 -
MySQL——日志(binlog/redo log/undo log)原理
摘要间隙锁的引入,可能会导致同样的语句锁住更大的范围,这其实是影响了并发度的。一、间隙锁的原理产生幻读的原因是,行锁只能锁住行,但是新插入记录这个动作,要更新的是记录之间的“间隙”。因此,为了解决幻读问题,InnoDB 只好引入新的锁,也就是间隙锁 (Gap Lock)。顾名思义,间隙锁,锁的就是两个值之间的空隙。比如文章开头的表 t,初始化插入了 6 个记录,这就产生了 7 个间隙。这样,当你执行 select * from t where d=5 for update 的时候,就原创 2021-12-31 19:24:45 · 442 阅读 · 0 评论 -
MYSQL——数据库主从备份原理
摘要大家知道 binlog 可以用来归档,也可以用来做主备同步,为什么备库执行了 binlog 就可以跟主库保持一致了呢?毫不夸张地说,MySQL 能够成为现下最流行的开源数据库,binlog 功不可没。而它的几乎所有的高可用架构,都直接依赖于 binlog。虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来的。一、MySQL主备的基本原理在状态 1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本地执行。这样可以原创 2021-12-31 21:15:10 · 3441 阅读 · 0 评论 -
MYSQL——数据库主从切换原理
摘要在现代社会中,企业每天的数据都是的成千上十万的。考虑到数据不能都在的一台服务器中进行操作,这样数据的吞吐量大,同时数据的不安全,如果出现服务器宕机,那么数据的将导致丢失等……为此需要研究数据库集群的相关的操作问题。同时的介绍原理和其他数据库的原理的。 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。 用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。 当业务发生数据库切原创 2021-03-17 17:01:46 · 3296 阅读 · 0 评论 -
MySQL——数据库读写分离设计方案
一主多从的结构,其实就是读写分离的基本结构了,那么怎么处理主备延迟导致的读写分离问题?原创 2020-12-10 09:50:12 · 911 阅读 · 0 评论 -
MYSQL——SQL慢查询与案例分析
摘要平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。接下来将详细的介绍的有关于SQL的慢查询的原理以及优化方案。一、SQL慢查询的原理InnoDB 在处理更新语句的时候,只做了写日志这一个磁盘操作。这个日志叫作 redo log(重做日志),也就是《孔乙己》里咸亨酒店掌柜用来记账的粉板,在更新内存写完 redo log 后,就返回给客户端,本次更新成功。原创 2021-12-29 09:30:10 · 683 阅读 · 0 评论 -
MYSQL——临时表的相关原理
摘要优化 join 查询的时候使用到了临时表。当时,我们是这么用的:create temporary table temp_t like t1;alter table temp_t add index(b);insert into temp_t select * from t2 where b>=1 and b<=2000;select * from t1 join temp_t on (t1.b=temp_t.b);你可能会有疑问,为什么要用临时表呢?直接用普通表是不是也可原创 2022-01-08 14:28:27 · 1131 阅读 · 0 评论 -
MySQL——缓冲池 (buffer pool)原理
摘要应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存 (cache) 里,避免每次都去访问数据库。操作系统,会有缓冲池 (buffer pool) 机制,避免每次访问磁盘,以加速数据的访问。MySQL 作为一个存储系统,同样具有缓冲池 (buffer pool) 机制,以避免每次查询数据都进行磁盘 IO。InnoDB 的缓冲池缓存什么?有什么用?缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘 IO,起到加速访问的作用。速度快,那为啥不把所有数据都原创 2021-04-09 10:11:11 · 2558 阅读 · 1 评论 -
MYSQL——随机查询消息解决方案
摘要这个英语学习 App 首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。他们发现随着单词表变大,选单词这个逻辑变得越来越慢,甚至影响到了首页的打开速度。现在,如果让你来设计这个 SQL 语句,你会怎么写呢?为了便于理解,我对这个例子进行了简化:去掉每个级别的用户都有一个对应的单词表这个逻辑,直接就是从一个单词表中随机选出三个单词。这个表的建表语句和初始数据的命令如下:mysql> CREATE TABLE `原创 2021-12-30 08:59:04 · 226 阅读 · 0 评论 -
MYSQL——数据库优化设计
摘要本博文主要是针对,mysql中高cpu、高内存、高io、高sleep等复杂场景进行常用的优化设计方案的说明介绍。一、占用CPU100%的优化1.1 总体思路1、先用操作系统命令 top 观察是不是 mysqld 占用导致的,如果不是,找出占用高的进程,并进行相关处理。2、如果是mysqld 造成的,show processlist,看看里面跑的 session 情况,是不是有消耗资源的 sql 在运行。找出消耗高的 sql,看看执行计划是否准确, index 是否缺失,或者实在是原创 2022-01-05 14:54:17 · 890 阅读 · 0 评论 -
MYSQL——数据库性能优化设计方案
摘要本博文主要介绍在mysql中的相关的案例的原理和分析。帮助你在相关的数据库设计上有所启发。一、对索引字段做函数操作导致全表扫描假设你现在维护了一个交易系统,其中交易记录表 tradelog 包含交易流水号(tradeid)、交易员 id(operator)、交易时间(t_modified)等字段。为了便于描述,我们先忽略其他字段。这个表的建表语句如下: CREATE TABLE `tradelog` ( `id` int(11) NOT NULL, `tradeid` varc原创 2021-12-30 21:28:59 · 872 阅读 · 0 评论 -
MySQL——全表查询对数据库的影响
数据库中的文件原创 2020-12-10 09:46:22 · 759 阅读 · 0 评论 -
MYSQL——join使用与优化原理
摘要事务(Transaction)是数据库区别于文件系统的重要特性之一。在文件系统中,如果正在写文件,但是操作系统突然崩溃了,这个文件就很有可能被破坏。当然,有一些机制可以把文件恢复到某个时间点。不过,如果需要保证两个文件同步,这些文件系统可能就显得无能为力了。例如,在需要更新两个文件时,更新完一个文件后,在更新完第二个文件之前系统重启了,就会有两个不同步的文件。事务的实现redo(恢复提交事务修改的页操作)事务隔离性由锁来实现。原子性、一致性、持久性通过数据库的redolog 和 undo原创 2021-03-27 20:49:47 · 443 阅读 · 1 评论 -
MySQL——kill命令失效的原理
InnoDB存储引擎原创 2020-12-10 09:45:56 · 876 阅读 · 0 评论 -
MYSQL——自增主键相关原理
不管的你在学习什么知识,你就问自己五个问题:这个东西是什么?这个东西怎么用?这个东西可能出现什么问题?为什么会出现这样的问题?你该怎么解决这样问题?如果你能对一件事情做到的这个五个问题。我想你基本上都能够解决很多事情。相信你在未来也能够做出自己的成就。...原创 2020-12-05 16:48:05 · 1405 阅读 · 2 评论 -
MYSQL——数据库的自增id类型
MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无符号整型 (unsigned int) 是 4 个字节,上限就是 2^32-1。既然自增 id 有上限,就有可能被用完。但是,自增 id 用完了会怎么样呢?原创 2020-04-17 11:48:46 · 3919 阅读 · 0 评论 -
MySQL——如何判断一个数据库是不是出问题
数据库的事务原创 2020-12-10 09:48:01 · 840 阅读 · 0 评论 -
MYSQL——真实生产环境的数据库机器配置
摘要介绍真实项目中数据库配置选型,帮助构建MYSQL集群,承载数据库的的存储与查询工作。一、生产环境机器配置经验值Java应用系统部署的时候常选用的机器配置大致是2核4G和4核8G的较多一些 数据库部署的时候常选用的机器配置最低在8核16G以上,正常在16核32G。一般Java应用系统部署在4核8G的机器上,每秒钟抗下500左右的并发访问量,差不多是比较合适的,当然这个也不一定。 一台机器能抗下每秒多少请求,往往是跟你每个请求处理耗费多长时间是关联的。大体上来说,根据我们大量的经验观察而言,原创 2022-01-19 23:08:37 · 2820 阅读 · 0 评论 -
MySQL——选错索引导致的线上慢查询事故
采样统计的时候,InnoDB默认会选择N个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。所以在不加强制索引的情况下,优化器选择了主键索引,因为它觉得主键索引扫描行数少,而且不需要额外的排序操作,主键索引天生有序。这样也有一定的弊端,比如我这个表到了8000w数据,建立索引非常耗时,而且通常索引就有3.4个g,如果无限制的用索引解决问题,可能会带来新的问题。高耦合,这种语句写在代码里,会变得难以维护,如果索引名变化了,或者没有这个索引了,代码就要反复修改。原创 2021-04-07 20:17:48 · 312 阅读 · 0 评论 -
MYSQL——分库分表原理与影响解决方案
分库分表,是企业里面毕竟常见的针对高并发、数据量大的场景下的一种技术优化方案,也是一个非常高频的面试题。但是,因为很多人其实并没有非常丰富的分库分表的经验,所以能把这个问题回答的比较好的人其实还挺少的。原创 2022-01-01 17:41:21 · 788 阅读 · 0 评论 -
MySQL——varchar上的索引必须要指定索引长度
虽然在阿里的Java开发手册中,是强制要求varchar字段上建立索引必须要指定索引长度,但通过我们的分析也能看出,并不是索引的字段都适用的,比如区分度不高的、或者可以大量运用覆盖索引的实现的,我认为,开发手册强调的普适场景,具体如何运用应该是我们通过了解原理之后,自行笃定。看过阿里Java开发手册的同学,应该有注意到在MySQL索引规约中,有这么一条强制性规范:”在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度“。一、指定索引长度的原理。原创 2021-03-27 16:35:17 · 1525 阅读 · 0 评论 -
MySQL——Keepalived+Mysql高可用架构实战
在生产环境中mysql的高可用的对于整个项目而言有着至关重要的作用。因此需要将mysql设计成为高可用的架构。本博文将详细介绍的mysql+keepalived构建的mysql互为主从的架构实战。原创 2022-01-09 12:06:45 · 4463 阅读 · 5 评论 -
MYSQL——数据库压测与实战
mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。mysqlslap为mysql性能优化前后提供了直观的验证依据,系统运维和DBA人员应该掌握一些常见的压力测试工具,才能准确的掌握线上数据库支撑的用户流量上限及其抗压性等问题。原创 2022-01-05 14:21:05 · 629 阅读 · 0 评论 -
MYSQL——
摘要sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库;主要包括以下几种测试:cpu性能 磁盘io性能 调度程序性能 内存分配及传输速度 POSIX线程性能 数据库性能(OLTP基准测试)本文主要介绍对数据库性能的测试。一、Sysbench的安装# 首先下载 Sysbench源码。运行 wget https://github.com/akopytov/sysbench/archive/1.0.20.tar.gz# 然后将文件重命名并解压缩。mv 1.原创 2022-01-18 11:18:24 · 1618 阅读 · 0 评论 -
MYSQL——实战问题与解决方案
本博文将介绍MYSQL日常实战中遇到的问题与解决方案。原创 2023-02-18 23:13:52 · 919 阅读 · 0 评论 -
数据库架构设计——表结构设计
摘要如何打造出一个能支撑海量的并发访问的分布式 MySQL 架构,本系列博文将从一下多个方面来分析有关MYSQL系统的架构设计相关原理。实际的业务为案例分析,分析实际业务中表使用的字段类型是如何选型,在介绍MySQL 中表的设计,比如表结构设计、访问设计、物理存储设计。通过模块一解决你表结构设计的痛点问题,让你打好架构设计最为基础的工作。一、MySQL架构设计原理1.1 表结构设计实际的业务为案例分析,分析实际业务中表使用的字段类型是如何选型,在介绍MySQL 中表的设计,比如表结构设计、访原创 2022-01-15 10:53:20 · 22315 阅读 · 2 评论 -
数据库架构设计——索引结构设计
摘要当单表的设计不足以支撑业务上线,接下来需要考虑的是索引设计优化。通过分析索引的基本原理,层层推进到索引的创建和优化,最后触达复杂 SQL 索引的设计与调优,比如多表 JOIN、子查询、分区表的问题。希望学完这部分内容之后,你能解决线上所有的 SQL 问题,不论是 OLTP 业务,还是复杂的 OLAP 业务。一、mysql的索引原理索引是提升查询速度的一种数据结构。索引之所以能提升查询速度,在于它在插入时对数据进行了排序(显而易见,它的缺点是影响插入或者更新的性能)。所以,索引是一门排序的原创 2022-01-15 16:41:56 · 2346 阅读 · 2 评论 -
数据库架构设计——高可用的架构设计
摘要业务上线必不可少的就是高可用的环节,而 MySQL 作为一个开源的数据库,虽然提供了大量的高可用解决方案,但或多或少存在不少问题。本章将介绍搭建一个完整的、可靠的、符合各种业务类型的高可用解决方案。一、MySQL 复制架构数据库复制本质上就是数据同步。MySQL 数据库是基于二进制日志(binary log)进行数据增量同步,而二进制日志记录了所有对于 MySQL 数据库的修改操作。在默认 ROW 格式二进制日志中,一条 SQL 操作影响的记录会被全部记录下来,比如一条 SQL语句更新了原创 2022-01-15 18:37:41 · 635 阅读 · 0 评论 -
数据库架构设计——数据强一致性设计
摘要高可用的三大架构设计包括了基于数据层的高可用、基于业务层的高可用,以及融合的高可用架构设计。在这些架构中,仅仅解决了业务连续性的问题:也就是当服务器因为各种原因,发生宕机,导致MySQL 数据库不可用之后,快速恢复业务。但对有状态的数据库服务来说,在一些核心业务系统中,比如电商、金融等,还要保证数据一致性。这里的“数据一致性”是指在任何灾难场景下,一条数据都不允许丢失(一般也把这种数据复制方式叫作“强同步”)。一、复制类型的选择我们已经谈到银行、保险、证券等核心业务,需要严格保障数据一致原创 2022-01-15 20:40:19 · 938 阅读 · 0 评论