1、三范式:
- 表的列具有原子性,
- 表的行数据具有唯一性,通常通过主键自增来实现
- 表种不要有冗余数据,能通过逻辑推导出来的数据就不要单独存储
- 反三范式:没有冗余的数据库末必是最好的数据库, 有时为了提高运行效率, 就必须降低范式标准, 适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式, 降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段, 允许冗余。
2、SQL 语句优化
- 查询当前 mysql 服务器的运行状态(show status),查看当前数据库服务器的查询 \ 写入 \ 更新的操作数量、客户端链接的数量、显示慢查询次数
- 定位查找执行比较慢的 sql 语句(定位慢查询,默认执行时间超过 10 秒为慢查询)
- show variables like ‘long_query_time’; // 查询慢查询时间
- set long_query_time = 1; // 设置慢查询时间为 1 秒
- 把慢查询的结果记录到指定的日志文件中
- 通过 explain 分析 sql 语句的执行细节,主要看 sql 语句使用了哪些索引
3、索引:主键索引、普通索引、唯一索引、全文索引、(复合索引)
- 当某列设置为主键后,则该列自动创建了主键索引
- show index from table_name; // 查询表的索引
- 复合索引适用最左索引原则
- like 查询,最左字符串不确定无法调用索引
- or 条件查询,必须所有条件字段都有索引,否正无法调用索引
- 字符串类型必须用引号包裹住,不然无法调用索引
- mysql 觉得全表扫描速度更快,那么也不会调用索引
- 查看索引使用情况 show status like ‘Handler_read%’; // Handler_read_key 值越低,Handler_read_rnd_next 越高 那么使用的效果越好。
4、分表技术:水平分表、垂直分表
5、读写分离
6、存储过程
7、配置优化:并发大小、缓存大小
8、mysql 服务器硬件升级
9、myisam 引擎需要清理不需要的数据和碎片化