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

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

被折叠的 条评论
为什么被折叠?



