数据库结构设计
业务分析----》逻辑设计—》数据类型选型—》对象命名—》建库建表
宽表模式
把很多属性都放在一个表中;
宽表模式存在的问题
- 数据冗余:
- 数据更新异常
- 数据插入异常
宽表模式有可能会造成一个表有会有很多非空约束或其他约束,而导致插入异常。
4. 数据删除异常
宽表模式的适用场景
- 配合列存储的数据报表应用
逻辑结构
数据库设计范式
- 第一范式
- 第二范式
- 第三范式
物理设计
MYSQL常见的存储引擎
- MYISAM MYSQL5.6之前的默认引擎,最常用的非事务型存储引擎
- CSV 以CSV格式存储的非事务型存储引擎
- Archive 只允许查询和新增数据而不允许修改的非事务型存储引擎
- Memory 是一种易失性事务型存储引擎
- INNODB 最常用的事务型存储引擎
InnoDB存储引擎的特点
- 事务型存储引擎支持ACID
- 数据按主键聚集存储
- 支持行级锁及MVCC
- 支持Btree和自适应Hash索引
- 支持全文和空间索引
create index
create index index_name on table_name
truncate table
truncate table imc_note;
SQL 优化
优化SQL的一般步骤:
- 发现问题
- 分析执行计划
- 优化索引
- 改写SQL
数据库垂直切分,数据库水平切分
常见问题发现渠道
- 用户主动上报应用性能问题
- 分析慢查询日志发现存在问题的SQL
- 数据库实时监控长时间运行的SQL
通过慢查询日志发现问题
- 配置MYSQL慢查询日志
set global slow_query_log = [ON | OFF]
set global slow_query_log_file = /sql_log/slowlog.log 配置日志地址
set global long_query_time = xx.xxx second 设置超过xx.xxx秒的sql语句,记录在日志中
set global log_queries_not_using_indexes = [ON | OFF]
每天都会存在大量的慢查询日志,这时我们可以使用以下命令来高效的分析慢查询日志
2. mysqldumpslow [opts…] [ logs… ]
3. pt-query-digest [options] [files] [dsn]