执迷 执迷
首页
  • 技术分享

    • 小白都能看懂的闭包
    • GO-GMP模型
    • MySQL调优
    • centos7部署nacos
    • elasticserch
    • redis
  • 发布一个node插件

    • 发布一个npm包
    • 如何打包一个插件工具库
    • 打包工具的选择
  • JavaScript
  • ES6
  • CSS
  • 框架
  • Node
  • 服务
  • 其他
自我介绍
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

执迷

代码也是艺术
首页
  • 技术分享

    • 小白都能看懂的闭包
    • GO-GMP模型
    • MySQL调优
    • centos7部署nacos
    • elasticserch
    • redis
  • 发布一个node插件

    • 发布一个npm包
    • 如何打包一个插件工具库
    • 打包工具的选择
  • JavaScript
  • ES6
  • CSS
  • 框架
  • Node
  • 服务
  • 其他
自我介绍
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端

  • 后端及运维

    • 服务
    • GMP模型
    • MySQL调优
    • centos7部署nacos
    • consul单台机器部署,注册外网服务健康检查
    • centos7安装ES
    • MySQL底层
      • centos7安装rabbitmq
      • docker部署redis
      • 平常常用命令
      • MySQL调优
    • 年终总结

    • 个人博客
    • 后端及运维
    刘某
    2024-07-30
    目录

    MySQL底层原创

    DBA

    # Innodb引擎

    1. 开启事务
    2. 事务提交完成
    3. 写redo日志(同 2. 事务提交一起)日志是顺序写(持久化机制)
    4. 修改数据()写数据,是随机写

    sex in ('female', 'male') 一般in在基数大的数据时,一般会走索引,基数小的数据不一定

    # undo日志

    # 索引下推 Using index condtion

    1. 使用联合索引查询数据,遵循最左原则
    2. MySQL5.6之前,查询语句*,索引查询到区间,先回表然后过滤数据,MySQL5.6之后,先过滤数据然后回表,查询的字段数据包含联合索引的字段+主键字段,则不需要回表查询

    # 单路排序与双路排序

    -- max_length_for_sort_data通过设置该值设置选择单路还是双路 默认大小1024字节
    set max_length_for_sort_data = 10 --表的字段长度综合肯定大于10字节
    
    -- sort buffer大小默认1M
    
    1
    2
    3
    4

    单路排序,是将select查出来的数据全部放到sort buffer中排序,排序完就是结果 双路排序,我将要排序出来的字段,加上行id放入sort buffer,排序完,是将排序的字段,还不是结果

    # 索引设计原则

    1. 代码先行,索引后上
    2. 联合索引尽量覆盖条件
    3. 不要再小基数字段上建立索引

    -- 比如性别,男女区分度不高

    1. 长字符串我们可以采用前缀索引

      -- varchar(255),长字符,可以采取 key index (name(20),age,position) 将前20个字符放入索引
      
    2. 核心思想:利用一两个复杂的多字段联合索引,抗下80%以上的查询,然后用一两个辅助索引抗下一些非典型查询-----不超过3个联合索引,联合索引增删改效率低

    # join

    # 有索引字段 会使用嵌套循环连接Nested-Loop Join(NLJ)算法

    select * from t1 inner join t2 on t1.a = t2.a -- a字段添加索引
    
    1

    # 没有索引字段 会使用基于块的嵌套循环连接Block Nested-Loop Join(BNL)算法

    整个过程对表t1和t2做一次全表扫描 在join_buffer中做对比 参数由join_buffer_size设定 默认大小256k 如果一次性放不下,则分段放、批次

    select * from t1 join t2 on t1.b = t2.b -- b字段没有索引
    
    1

    # 关联sql优化

    • 关联字段加索引,让mysql做join操作尽量选择NLJ算法
    • 小表驱动大表,大表一定要走索引
    #运维#数据库
    上次更新: 2024/07/30, 22:53:10
    centos7安装ES
    centos7安装rabbitmq

    ← centos7安装ES centos7安装rabbitmq→

    最近更新
    01
    MySQL调优 原创
    08-04
    02
    consul单台机器部署,注册外网服务健康检查 原创
    07-30
    03
    centos7安装ES 原创
    07-30
    更多文章>
    Theme by Vdoing | Copyright © 2019-2024 执迷 | 闽ICP备2022018045号 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式