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