Mysql

Mysql服务端结构

请添加图片描述

连接器: 管理数据库连接,权限验证
解析器: 词分析,语法分析,拆分SQL,将from,where等拆分成AST抽象语法树
优化器: CBO成本优化,RBO规则优化,决定走什么索引,最终的执行计划
执行器: 按AST树顺序执行SQL,操作引擎,返回结果

行式存储: 按数据行存储,InnoDB,Myisam
列式存储: 按列存储,如ORC,Parquet
存储引擎: 文件在磁盘不同的组织形式

存储引擎有哪些,区别是什么?
Memory:临时存放数据,数据量不大
Archive:适合归档数据,如记录日志等

查询缓存是什么?
MySQL8.0版本前存在,将查询结果进行缓存,后面就取消了,因为数据经常更新导致数据失效,命中率比较低

InnoDBMyisam
支持事务不支持
支持行锁,表锁支持表锁
有聚簇索引没有聚簇索引
不支持全文索引支持全文索引
支持树索引支持树索引
支持数据缓存不支持数据缓存
支持外键不支持外键

MySQL执行计划怎么看?重要参数?
https://blog.csdn.net/qq_38969734/article/details/124053731

Mysql 语法顺序:

select[distinct]  
from  
join(如left join)  
on  
where  
group by  
having  
union  
order by  
limit

MySQL执行顺序:

from  
on  
join  
where  
group by  
having  
select  
distinct  
union  
order by  

索引

索引存在文件中还是内存中?
索引存在文件中,

索引在数据读取的时候要返回什么信息?
可能返回表的行数据(聚簇索引),可能返回聚簇索引(非聚簇索引),可能返回数据地址(myisam)

知识点: 磁盘与内存交互是按页读取
一般每页4k或8k,MySQL默认读16k
优化就是减少IO次数,或者IO数据量
MySQL5.7前没有索引下推就是第一个条件查出数据,后续条件在内存中处理过滤
5.7后默认开启索引下推,第一个,第二个条件都是在存储引擎中过滤,减少数据IO量

索引为什么不像hive一样存在 key值——文件名称—— offsset?
性能太差

OLTP,OLAP区别?
联机事务处理: 频繁的增删改查
联机分析处理: 一般是大数据分析

MySQL如何设计索引系统?
数据格式:k-v
数据结构:hash,树

MySQL应用什么数据结构?
B+树

为什么innodb,myisam不用hash结构?
用hash结构,有几个点
1. 有一个足够大容量的数组
2. hash分布不均匀
3. hash冲突会导致查询性能降低
4. 无序,范围查询性能差

为什么树一定要用 B+ 树?
Hash表 :适合等值查询,但是数据量大时,发生hash冲突,效率会下降,范围查询时只能全表查询,Memory引擎使用,但由于在内存中操作,所以可以忽略IO耗时

树索引结构IO次数磁盘预读范围查找缺点使用场景
二叉查找树若数据倾斜,树会很高每个节点不能填满4K内容,浪费根节点多次遍历左小右大,数据有序时,容易发生数据倾斜,退化成线性链表最基础的二叉树,一般都是使用它的变种
AVL树树的高度就是IO次数,而两个节点存储数据少树会很高每个节点不能填满4K内容,浪费根节点多次遍历每次插入,更新都要旋转树,开销很大查询性能很高,但是频繁插入开销大
B树(B-树)非叶子结点也有数据,树较高一个节点大小设为16K,可充分利用IO根节点多次遍历非叶子结点存数据,树比较高,不支持范围查询MongoDB
红黑树数据量巨大的场景下,树会高一点每个节点不能填满4K内容,浪费根节点多次遍历大数据也会存在轻量的数据倾斜,不支持范围查询HashMap,相比其他树插入开销有所减少
B+树只在叶子节点存储数据,树相对较低一个节点大小设为16K,可充分利用IO叶子节点之间使用双向指针连接,最底层的叶子节点形成了一个双向有序链表。适合大数据索引查询InnoDB,Myisam

注:只有红黑树和普通的二叉查找树不能保证所有叶子节点同一高度

红黑树和AVL树有什么区别?
AVL平衡二叉树,每次插入更新都要旋转树结构,开销很大;红黑树不追求完全平衡,可以在保证大致平衡的基础上减少旋转的开销,最多三次旋转,而查询最多也只是多比较一次而已

注: 提高查询性能就是减少IO,减少IO次数或者量

为什么性别不适合建索引?
如果key值大量重复,肯定是非聚簇索引,叶子结点存的是聚簇索引,会产生回表,可能全表查询相对起来效率更高,而且索引也会占用空间

索引分类:
主键索引
唯一索引
普通索引
全文索引
组合索引

一个组合索引只有一棵树

回表: 通过普通索引IO找到聚簇索引,再根据聚簇索引的B+树去查表(这是一个可优化的点)

索引覆盖: 通过普通索引直接检索到聚簇索引,直接返回聚簇索引而不用再次走聚簇索引的IO去获取聚簇索引

USING INDEX : 执行计划出现这个说明存在索引覆盖,开心,如果没有想可不可以有

最左匹配: 必须找到前置列,后续列才会有序才有意义

存在问题: 如果前面的列判断存在<或>那么会阻断后面的列,如果是<=或>=则不会,这也是索引列失效的一种情况。

索引下推: 5.7版本后将索引在存储引擎中进行过滤而不是内存中,发现using index condition就是索引下推,例:5.7之前第一个过滤在存储引擎中,第二个在内存中,5.7后都在存储引擎中减少IO量

小知识: 隐式类型转化,会导致索引失效

聚簇索引: B+树的叶子结点存的是数据就是聚簇索引
非聚簇索引: B+树的叶子结点存的是地址就是
聚簇索引选择: 主键》唯一键》Rowid
选择过程: 如果第一次没设主键,导致rowid作为聚簇索引的话,后面设置主键会导致地址重排,将主键改为聚簇索引,解决的一个问题就是,如果主键只是普通索引的话会进行双倍IO

小知识:

字符串按字典序排序
SQL server 有binlog
innodb有redolog undolog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值