MySQL优化方向主要有:
1、数据库表的设计(三范式);
2、sql语句的优化;
3、给相关表字段添加合适的索引;
4、数据库分库分表,表的横向、垂直拆分;
5、对mysql配置进行一些优化(读写分离等);
6、定时清除垃圾数据,定时进行碎片整理;
7、多用存储过程,触发器;
8、数据库服务器硬件优化;
=================================================================
数据表关系
一对一:主键对主键,公用主键;
一对多:主键对非主键;
多对多:非主键对非主键;
=================================================================
三范式
第一范式(1st NF, First Normal Fromate):表字段(每一列)具有原子性。即不可再分,比如(不太恰当)地址字段,内容“中国河南省郑州市”,若该内容保存为一个地段address,则可划分为三个字段country、provence、city;
第二范式(2nd NF, Second Normal Fromate):表非主键必须依赖于主键。即一个表只表示一种对象、场景。一张订单表存在商品ID和价格等不相关字段;
第三范式 (3rd NF, Third Nomal Fromate):非主键之间存在依赖传递。即一个表中存在可通过一个字段推导出另一个字段。一张成绩表中,既存在学号又存在学生姓名;
优点:
1)范式化的数据库更新起来更加快;
2)范式化之后,只有很少的重复数据,只需要修改更少的数据;
3)范式化的表更小,可以在内存中执行;
4)很少的冗余数据,在查询的时候需要更少的distinct或者group by语句。
缺点:
范式化的表,在查询的时候经常需要很多join关联,增加让查询的代价。
反范式
通过增加冗余或重复的数据来提高数据库的读性能。
优点:
1)可以避免关联,因为所有的数据几乎都可以在一张表上显示;
2)可以设计有效的索引;
缺点:
删除数据时可能会造成某些有用的数据丢失。
规范和效率
越遵循三范式,表设计越规范,数据冗余越少,但同样表的查询效率会降低;实际工作中,数据表的设计很少按照3大范式取设计数据库,而是根据实际业务需要,产生一些冗余数据,确保提高查询效率,增加点冗余数据最多增加一些存储空间的开销,但是提高了查询效率。
==================================================================
MySQL开启慢查询日志
针对sql语句优化,需要先定位到慢查询。通过开启MySQL慢查询日志,定位到查询时间较长的sql进行优化。