MySQL底层架构

体系结构

  • 连接层:做授权认证,校验密码,校验客户端操作权限
    • 连接池
  • 服务层:MySQL核心功能
    • SQL接口
      • 跨存储引擎的实现,DML、DDL语句封装等
      • 存储过程、视图、触发器
  • 解析器
    • 查询优化器
    • 缓存
  • 引擎层:控制数据存储提取的方式
    • 5.5版本后默认InnoDB引擎
    • 插拔式存储引擎
    • 索引是在存储引擎层实现的
      • 不同的引擎,索引结构不一样
    • 服务器通过API和引擎交互
  • 存储层:数据存储
    • 日志
      • redolog、undolog
      • 二进制日志、错误日志、查询日志、慢查询日志
    • 数据
    • 索引

简单概念

  • Sql连接池
    • ->线程获取到流数据
  • sql接口
    • 监听端口获取SQL
  • 解析器:
    • 进行关键字解析,查询需要做什么
  • 优化器:
    • 选择效率优先的线路去执行
  • 执行器:
    • 执行SQL ,CRUD
  • 存储引擎:
    • mysql插拔式编程
    • 可选引擎,我要做什么,可以选择更优的引擎进行替换
    • 当前数据在哪,我应该怎么帮助执行器更好的执行SQL,更好的放到内存或者磁盘,对数据进行操作

SQL请求

  • 当用户请求到SQL数据,SQL接口就可以从线程中监听的端口中获取到SQL语句,这时他是不知道这个语句是要做什么的,他就会将这个sql语句交给Sql解析器进行分析,当解析器通过关键字分析出来这句sql将要执行什么操作后,他会再将sql交给优化器来选择执行线路,sql优化器可以对语句字段根据数据库的索引,选择高效的执行路线交给sql执行器进行执行,,sql执行器此时就可以执行了,,执行的时候会让存储引擎帮忙,看数据在哪个地方,怎么执行,存储引擎就落盘到磁盘,
  • 可以帮助分发到内存或者是磁盘,方便进行sql数据的操作

mysql索引

索引的划分可以根据不同的角度划分为不同的结构,比如数据结构,或者存储角度等。

索引结构

在mysql的innodb引擎下,他是一个B+tree的结构

  • B+tree
    • 简单理解为一棵普通的二叉树,和一个完整的链表,链表就是是叶子节点,树就是非叶子节点
    • 通过树可以确定要找的数据在哪个范围内,然后就可以通一个个的子节点找到对应的链表位置
    • 最大的特点就是可以获取多数据,避免回旋查找其它数据,
    • 因为数据结构是链表,所以一但确定了某一个节点,就表示这个节点之前,或者之后的所有数据都已经拿到了,就不用再去找向上再去通过树向上找上去重新查找了,
    • 所以在数据库中查找的效率很高

 

存储角度:

聚簇索引和非聚簇索引

  • 聚簇索引:
    • 主键索引 (查询效率高),每张表有会有一个默认的主键
    • 通过主键索引可以找到所有的值,通过主键来查找数据效率是最高的
    • 如果没有设置主键列,那么第一个非空字段,就是主键列
    • 没有都没有非空主键列,那么mysql会自成生成一个隐藏的默认的主键列索引
  • 非聚簇索引:
    • 辅助索引,非主键索引
    • 只有辅助列的值
  • 如果是通过非聚簇索引来找数据的话,如果非聚簇找不到,就会去找聚簇,就称为回表
  • 回表查询会降低效率,所以应该避免回表
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JIE结弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值