MySQL
文章平均质量分 63
记录 MySQL 相关知识
盼兮猫
长亭外 古道边 芳草碧连天
展开
-
简单认识 MySQL 分库分表
本篇我打算简单整理一下关于 MySQL 分库分表的基础知识分库:将单个数据库拆分成多个数据库的过程分表:将单张表拆分为多张表的过程总得来说分库分表的原因主要有以下几种:提高性能,增加并发量,增加安全性提高性能是说单张表数据量太大时,数据库查询效率变低,通过拆分数据的方式提高查询性能增加并发量是说单个 MySQL 实例最多支持 2000 左右的并发量,一般超过 1000 数据库就已经很危险了,所以可以通过拆分多几个 MySQL 实例,通过分流的方式减少单个实例上的压力,防止高并发流量直接将数据库原创 2021-09-14 00:17:58 · 358 阅读 · 0 评论 -
select count(1)、count(*)、count(column)
count(*):先把星号翻译为具体字段名字,多了一步翻译,效率差点count(1):计算有多少符合条件的行,可以理解为每行数据存在某个值固定的字段,计算有多少个固定值从结果来说:count(*) 和 count(1) 没区别,都不会过滤 NULLcount(column) 会过滤 NULL从速度来说:如果只有一列,count(*) 效率最高多列时,count(1) 效率高于 count(*)如果列为主键,count(column) 效率最高如果列不为主键,count(1) 效率比原创 2021-08-15 20:16:05 · 760 阅读 · 0 评论 -
MySQL 左连接、右连接、内连接
左连接:select * from table_name t1 left join table_name t2 on t1.id = t2.id以左表每条数据为基础,去右表全表匹配,返回满足条件的数据,右表没找到显示 NULL右连接:select * from table_name t1 right join table_name t2 on t1.id = t2.id以右表每条数据为基础,去左表全表匹配,返回满足条件的数据,左表没找到显示 NULL内连接:select * from ta原创 2021-08-13 16:47:34 · 68 阅读 · 0 评论 -
MySQL 常用命令行
命令行链接 MySQL 监视器mysql -u 账号 -p 密码常用库相关命令// 创建数据库CREATE DATABASE 数据库名// 删除数据库DROP DATABASE 数据库名// 查看所有数据库show DATABASES// 选中某个数据库USE 数据库名常用表相关命令// 创建表CREATE TABLE 表名 (字段名1 数据类型 [其它可选项],字段名2 数据类型 [其他可选项],...)// 删除表DROP TABLE 表名// 显示表的数据结构D原创 2021-04-21 13:17:40 · 67 阅读 · 0 评论 -
MySQL 三大范式
MySQL 三大范式属于一组规则,方便开发人员建立冗余小,结构合理的数据库第一范式:每一列都是不可再分的最小单位举个例子:某网购平台用户信息表通过地址字段记录客户地址,如陕西省西安市雁塔区XXX。系统为了按区域推荐商品需要多次获取用户所在省份,而省份信息实际在地址字段中已经保存过,但该字段还包含所在城市、小区等其它信息。此时也就说该字段不满足第一范式,实际可以将它拆分为三个字段:省、市、详细地址第二范式:每一列都与主键全部内容相关,而不是主键某一部分第二范式在第一范式的基础了做了增强,举个例子:订单原创 2021-08-24 23:38:38 · 141 阅读 · 0 评论 -
MySQL 主从复制
一般情况下,线上每个 Redis 实例都包含从库,用来做读写分离,减轻主库的压力MySQL 的主从复制默认是异步的,其主要流程如下:1. 从节点的 I/O 线程连接主节点,并请求指定 bin log file 指定 position 之后的日志内容2. 主节点收到请求后,读取并返回。返回信息除了包含日志内容外还包含 bin log file 信息和 position 信息3. 从节点的 I/O 线程收到返回后,将接收到的日志内容更新到 relay log,并将 bin log file 信息和原创 2021-09-04 15:49:46 · 68 阅读 · 0 评论 -
MySQL 日志
MySQL 常见日志有以下七种:binlog 日志redo logundo log慢查询日志一般查询日志中继日志错误日志binlog 是 Server 层的日志,主要用于归档,在主备同步、备份、恢复数据时发挥作用,常见格式有 row,mixed,statement 三种。redo log 是 InnoDB 特有的日志,主要用于确保事务的持久性。InnoDB 为了提高数据库的性能,每次有 SQL 请求时没有同步到磁盘,而是先保存在内存中,...原创 2021-06-18 11:30:06 · 85 阅读 · 1 评论 -
InnoDB 四大特性
InnoDB 四大特性如下:1. 插入缓存,Insert buffer2. 二次写,double write3. 自适应哈希索引,adaptive hash index4. 预读,read ahead-- --插入缓存索引数据存储在磁盘上,主键索引由于天然自增,无须磁盘的随机 I/O,只需不断追加即可。但普通索引大概率无序,默认情况下需要进行随机磁盘 I/O 操作,效率极差为了解决普通索引插入效率低下的问题,InnoDB 存储引擎引入 Insert Buffer 的概念,对于普通索原创 2021-09-04 15:30:17 · 4371 阅读 · 1 评论 -
MySQL 存储引擎
存储引擎是数据库底层软件,数据库管理系统通过存储引擎进行增删改查操作,不同的存储引擎提供不同的机制,我们可以根据业务需求选择合适的存储引擎。我们可以通以下下 sql 脚本查看存储引擎:// 查看当前数据库支持的存储引擎SHOW ENGINES;// 查看某个表使用的存储引擎show create table 表名;可以看出 InnoDB 是默认的存储引擎,其中后面三列分别表示是否支持事务、分布式是否符合 XA 规范,是否支持事务处理中的保存点。命令二通过创建表的语句可以看出这张表使用什么存原创 2021-04-22 13:30:08 · 89 阅读 · 0 评论 -
慢查询 SQL 调优
调优第一步,开启 MySQL 慢查询日志,找出慢查询 SQL:// 开启慢查询日志set global slow_query_log = ON;// 设置慢查询超时时间(单位秒)set global long_query_time = 'xxx';// 设置慢查询日志名称,默认名称:hostname-slow.logset global log-slow-queries = 'xxx';// 设置记录没有使用索引的 SQLset global log_querise_not_using_in原创 2021-06-22 11:35:37 · 342 阅读 · 0 评论 -
MySQL 锁
快照读:普通的 select 语句,基于 MVCC 和 undo log 实现,不加锁当前读:update、delete、insert,select…lock in share mode (共享读锁) 等操作,基于锁实现当我们执行 update、delete 操作时,首先需要找到对应的记录再操作、insert 操作类似,需找到最后一条数据,确保两条并行的 insert 不会混合插入到同一行。此时读操作就采用当前读实现,当前读每次读取最新的数据,基于锁实现。根据机制不同,锁可以分为以下两种:共.原创 2021-06-15 12:14:25 · 163 阅读 · 1 评论 -
MySQL 索引原理
B 树实际都是从 AVL 树演化而来的,AVL 树由于二叉树的原因,总是不能摆脱每个节点只能保存一条数据的情况,查询效率总是 log2n,整体效率不高,在这种场景下提出了多叉树,减少磁盘 I/O 寻址次数,提高效率B 树实际就是 B- 树,这块是由于翻译问题...原创 2021-09-04 17:34:42 · 108 阅读 · 0 评论 -
MySQL 索引
通俗点来讲,索引就像书的目录,可以帮助我们尽快找到想看的内容。对应到数据库,索引实际上就是为了提高查询效率。索引的类型普通索引:没限制,可重复,可为空主键索引:索引列值唯一,不允许为空唯一索引:索引值唯一,允许为空全文索引:建立在文本类型(CHAR,VARCHAR,TEXT)上的索引,字符串较大时,普通索引查询效率低,建议使用全文索引空间索引(了解):按照空间关键建立的索引前缀索引(了解):建立在文本类型上指定长度的索引按照索引使用到的列数又可以分为单列索引和组合索引:单列索引:建立原创 2021-04-28 16:22:43 · 132 阅读 · 0 评论 -
MySQL MVCC
隔离级别定义了事务必须与其他事务进行资源或数据更新相隔离的程度,MySQL InnoDB 事务默认采用可重复读隔离级别,其中可重复读通过 MVCC 实现。MVCC :Muit-Version Cnncurrency Control,多版本并发控制,它是一种并发控制的方法,在数据库管理系统中实现对数据库的并发访问。实现:InnoDB 会在每条记录后面增加三个隐藏字段:DB_ROW_ID:行 ID,随着插入操作单调递增,如果数据包含主键,则不会创建该行DB_TRX_ID:记录插入或更新该行的事务 ID原创 2021-06-09 14:33:51 · 144 阅读 · 2 评论 -
MySQL 事务
事务一般满足 ACID:原子性(Atomicity):事务不可分割,要么都执行,要么都不执行一致性(Consistency):事务前后数据完整性必须一致隔离性(Isolation):不同事务之间不能互相干扰持久性(Durability):事务一旦提交,操作就是永久性的事务间的影响脏读:事务读取另一个事务未提交的数据不可重复读:在一个事务内读取某一行数据,多次读取结果不同幻读:在同一个事务内前后读取到的数据条数不一致隔离级别读未提交(Read uncommitted):啥都无原创 2021-04-29 15:11:10 · 86 阅读 · 0 评论 -
MySQL 整体架构
从整体架构来说,MySQL 可以分为服务层和存储引擎层:服务层:管理连接、缓存、SQL 验证优化、SQL 执行等存储引擎层:负责数据处理,向上提供接口服务层包含:连接器、缓存、分析器、优化器、执行器、存储过程、触发器、视图和内置函数连接器主要负责管理客户端的连接、权限验证等。我们可以通过 show processlist 查看当前连接的状态。用户的权限只在连接建立时获取,后续管理员修改不会影响当前已连接用户的权限。连接默认保持 8 小时,超时自动断开。这样做的好处在于,短时间内客户端一直使用同原创 2021-06-17 15:49:05 · 98 阅读 · 0 评论