新手认识 Mysql数据库

本文深入探讨Mysql中的B-Tree与Hash索引特性,解析密集索引与稀疏索引的区别,并提供定位及优化慢查询SQL的方法。同时,讲解了InnoDB与MyISAM的事务支持差异,以及如何通过调整事务隔离级别防止更新丢失、脏读等问题。

Mysql模块划分

如何设计一个数据
在这里插入图片描述

索引模块

二叉查找树上阵
在这里插入图片描述

在这里插入图片描述
B-Tree
在这里插入图片描述
定义:
(1)根节点至少包括两个孩子
(2)树中每个节点最多包含m个孩子
(3)除根节点和叶子节点外,其他每个节点至少有ceil(m/2)个孩子
(4)所有叶子节点位于同一层

在这里插入图片描述
B±Tree
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Hash索引

在这里插入图片描述
缺点
(1)仅仅能满足“=”,“IN”,不能使用模糊查询
(2)无法被用来避免数据的排序操作
(3)不能利用部分索引建查询
(4)不能避免表扫描
(5)遇到大量Hash值相等的情况后性能并不一定比B-Tree索引高
在这里插入图片描述

密集索引和稀疏索引的区别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论:InnoDB数据和索引是存储在一起的 MySAN索引和数据时分开存储的。

在这里插入图片描述

如何定位并优化慢查询Sql

1、根据慢日志定位慢查询Sql
show variables like ‘%query%’
show status like ‘%slow_queries%’
set global slow_query_log = on;
set global long_query_time = 1;

在这里插入图片描述
在这里插入图片描述
2、使用explanin等工具分析Sql
在这里插入图片描述

在这里插入图片描述

index 、all是全表扫描这时就需要 优化了。
在这里插入图片描述
3、修改Sql或者尽量让Sql走索引
在这里插入图片描述
4、阿里postgreSql优化工具。

最左匹配原则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
lock tables person read | write; (添加读锁也称为共享锁)
上了读锁还可以上读锁。
上了读锁就不能再上写锁、上了写锁也不能再上写锁(写锁也称排他锁)
unlock tables;

Mysql默认自动提交事务
InnoDB支持事务MyISAM不支持事务
InnoDB用的是二段锁,加锁和解锁是分成两个步骤进行操作的。
MySql加锁的目的是实现数据库的并发控制
表级锁和索引无关。
MySql用到索引的时候走的是行级别锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
乐观锁的实现机制 加一个Version
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述原子性:(事务包含的所有操作要么都做要么都不做失败进行回滚)
一致性:(一个一致状态 转变成另一个一致性状态 满足完成性约束 例子 :转账)
隔离性:(多个事务并发执行时不影响其他的事务)
持久性:(一个事务一旦commit提交会永久保存在数据库)

在这里插入图片描述

更新丢失

在这里插入图片描述
查看事务的隔离级别( Mysql默认隔离级别是读可提交)
在这里插入图片描述
设置事务的隔离级别
在这里插入图片描述
开启事务
start transaction

更新丢失:
脏读:一个事务读取到另一个事务还未提交的事务
不可重复读:是指在数据库访问中,一个事务范围内两个相同的查询返回了不同的数据
幻读:事务A第一次查询得到一行记录row1,事务B提交修改后,事务A第二次查询得到两行数据row1 和row2

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值