【mysql】基础知识总结

mysql

mysql文档总结

基础

操作

  • 非交互式的

    • show global variables like ‘wait_timeout
  • 查询

    • show variables like ’内容‘
  • 修改配置

    • 永久修改

      • my.cnf
    • 动态修改会恢复

      • set命令
  • 通信协议

    • unix/socket
    • tcp/ip
  • 通信方式

    • 双工
    • 单工
    • 半双工

流程、缓存、 解析

  • 词法解析
  • 语法解析
  • 解析树

预处理

  • optimize优化器

查询执行引擎、存储引擎、数据信息

memory+ 磁盘数据

  • 磁盘数据redo log

    • 特点write ahead logging
    • log buffer刷盘时机:1.m每次commit的时候(实时写入)0.每秒中写入一次磁盘DB file文件2.实时写入,但是延迟刷入文件DB file
    • 崩溃记录
  • 内存:数据buffer pool

    • log buffer
    • LRU算法
    • 自适应的hash数据索引index
    • 非唯一性索引设置的change buffer
  • undo log 回滚事务数据

    • 磁盘内写入—更新数据前
  • bin log

    • DDL/DML的逻辑日志

      • 可以用做主从或者数据恢复

索引

基础

  • 定义

    • 数据库中排序的数据结构,以便于快速的查询更新数据信息
  • 类型

    • normal普通索引
    • 主键索引-不能有空值
    • unique唯一索引
    • full text全文索引
      • full text index(字段)

创建索引

  • create index 索引名 表名 (字段名)
  • alter table 表名 add index 索引名(字段名)

索引失效

  • 前提
    • 离散度公式
  • 联合索引最左匹配原则
    • 如果创建了联合索引例如A_B,则相当于创建了A索引,A_B索引
  • 回表/覆盖索引
    • 如果查询结果内只包含索引列-则为覆盖索引
  • 索引条件下推
  • 频繁更新的数据不要作为索引
  • 索引上使用表达式(sum,count,concat,-,+ * ,/等)
  • 字符类型数据用数字等转换(强制的隐形的转换)
  • 模糊查询中like前边带%的时候也不会用到索引
  • 负向查询能用到索引么(<>,not in,!=等)

事务、基础

  • 定义、- 略

  • 四大特性

    • 原子性,隔离性,一致性,持久性

      • 一致性

        • 余额为0了还进行操作
      • 原子性

        • 一方减少一方增加
      • 隔离性

        • 对于表或行的数据不干扰
      • 持久性

        • 事务提交成功就是永久性变更
  • 问题

    • 脏读

      • 一个事物A读取到了另一个事务B没有提交的数据(B的数据可能会回滚)
    • 不可重复读

      • 一个事务A进行了两次读取操作–》读取到了事务B修改过后的数据–》出现了两次不一致的情况(更新和删除)
    • 幻读

      • 一个事务A进行了两次读取操作查询范围操作时—》事务B进行了插入操作----》影响了再次查询的结果(插入)

随机io/顺序io

MYISAM、INNODB

myisam数据与索引分开存储

innodb数据与索引存储到一起

聚集索引

  • 索引的键值的逻辑顺序与表的物理存储顺序是一致的!

Innodb辅助索引

  • 先通过辅助索引查找主键索引

    • 在通过主键索引找到数据

没有主键索引–聚集索引的选取

  • 第一个不包含null值的unique key
  • rowId—Innodb自带的内部聚集索引

类型

  • 锁的模式

    • 行级别锁

      • 共享锁(读锁)多个事务可以使用一把锁

        select * from table lock in shar mode;

      • 排他锁(写锁)事务单享–(与包括本身的所偶其他锁排斥)

        select * from table for update;
        默认update、insert,delete是加上锁的

    • 表级别锁

      • 意象派他所
      • 意向共享锁
  • 锁的算法

    • N个记录有N+1个间隙—》》临建区间(a,b]左开右闭
    • 唯一性索引—>>>记录锁-等值查询-锁住当前行
    • 间隙锁->>>锁住左开右开的数据不存在的区间—》》》锁住插入操作(有范围的查询修改)
    • 临建锁—》》》包含临界值的区间
  • 死锁

    • 死锁等待时间

      • show global variables like ‘innodb_lock_timeout’
    • 循环等待条件,不可剥夺,互斥

    • 避免

      • 方法

        1.顺序访问
        2.数据排序
        3.申请足够级别的锁
        4.避免没有where条件的操作
        5.大事务分解为小事务
        6.使用等值查询而不是范围查询

索引的数据结构

avl-tree结构

  • index的值
  • 地址所指向的数据存储位置
  • 左子树地址
  • 右子树地址

B+树-多路增强查找树

  • 关键字数量N=子节点数量

    • 数据放到叶子节点上边
    • 左开右闭
    • 叶子结点上的数据有循环数据有序指针

B树-多路查找树

  • N+1个子节点
  • 存的是地址

优化器

cost base optimizater

rule base optimizater

innodb存储结构

16k页

数据和索引存储到一起

索引·类型·

  • B+tree
  • HASH

XMind: ZEN - Trial Version

猜你喜欢

转载自blog.csdn.net/weixin_43795840/article/details/122051373