MySQL学习18-知识重点

2021-03-02 15:16:16 浏览数 (1)

MySQL知识点进行了一个小结

引擎

MyISAM
  • 不支持事务
  • 支持表级锁
  • 不支持MVCC
  • 支持全文索引
  • 不支持外键
  • 堆表结构
InnoDB
  • 支持事务
  • 支持行级锁
  • 支持MVCC
  • 支持外键
  • 不支持全文索引
  • 索引组织表结构
Memory
  • 内存式引擎
  • 临时存放数据,数据量小
  • 安全性低
Archive
  • 事务是非安全的
  • 支持高并发
  • 适合存储归档数据
  • 对于select和insert语句,比较适合

事务

ACID
  • 原子性Atomicity
  • 一致性Consistency
  • 隔离性 Isolation
    • 未提交读(Read Uncommitted)
    • 提交读(Read Committed)
    • 可重复读(Repeated Read),默认
    • 串行读(Serializable)
  • 持久性Durability
术语
  • start transaction
  • end transaction
  • commit transaction
  • rollback transaction

索引index

分类
  • index
    • 普通索引,可以重复
  • unique
    • 唯一索引,索引列的值必须唯一,可以为空
  • 组合索引
    • 多个字段上创建的索引
  • primary key
    • 主键索引,一个表只能有一个,且不能为空
  • 全文索引fulltext
    • MyISAM 支持
    • InnoDB5.6以下不支持
特点
  • 提高查询速度
  • 创建和维护耗费资源和时间
  • 影响插入的速度
效果
  • show status like '%handler_read%'越大越好

语句

DDL
  • 数据定义语言(create drop)
DML
  • 数据操作语句(insert update delete)
DQL
  • 数据查询语句(select )
DCL
  • 数据控制语句,进行授权和权限回收(grant revoke)
TPL
  • 数据事务语句(commit collback savapoint)

语句优化

  • 避免select *,将字段列出来
  • 使用连接(join)来代替子查询
  • 使用limit对查询结果的记录进行限定
  • 用 exists 代替 in
  • where
    • 用Where子句替换HAVING 子句
    • 不要在 where 子句中的“=”左边进行函数等
    • 避免在where 子句中对字段进行 null 值判断
    • 避免在 where 子句中使用!=或<>操作符

三范式

第一范式
  • 对属性的原子性约束
  • 要求字段具有原子性,不可再分解
第二范式
  • 满足范式1
  • 非主键字段不能出现部分依赖主键
第三范式
  • 满足范式 2
  • 不能出现传递依赖

表结构优化

  • 建表的时候设置主键
  • 选择正确的存储引擎
  • 使用简单的数据类型,整型比字符处理开销更小
  • 使用合理的字段属性长度,固定长度的表会更快
  • 使用enum、char而不是varchar
  • 给频繁使用和查询的字段建立合适的索引
  • 尽可能使用not null定义字段

varchar和char

char
  • 声明字符长度,0-255
  • 当char值被存储时,会用空格填充到指定的长度
  • char(n):每个值占据n个字节
varchar
  • 变长,多余的截掉
  • 字符长度 0-65535
  • varchar(n):每个值占据n 1个字节,1个字节用来记录长度

0 人点赞