一 、数据库表设计原则
1,数据库命名原则:英文字母,多个单词间用下划线’_’,单词尽量简洁、见名知意
2,数据库表命名原则:英文字母,多个单词间用下划线’_’,单词尽量简洁、见名知意
3,数据库表字段类型:尽量用int型,固定长度用char,使用varchar的范围尽量贴合实际,能用tinyint就不要用int和smallint,最好给字段设置默认值,默认值不为null;
4,数据库表字段索引:主键必须设置索引,例如user_name字段,索引名为user_name_index,索引不必设置太多
5,数据库范式
第一范式:字段值具有原子性,即字段值不可分割
第二范式:一个表必须有主键,即一行数据可以独立区别
第三范式:一个表中不能包含关联表中其他非关键字的信息,即不要有冗余
二、 数据库优化
1、硬件设备:Disk IO优化,看情况选择CPU
2、系统配置:增加读写进程数、增加tcp的队列数、减少断开链接资源回收,延长日志刷新频率
3、索引优化
4、SQL优化
1)表空间分离
最起码user和其他应用不应该使用系统表空间
表空间应该分在不同物理存储上,实现表空间分离
2)开启慢查询日志、善用MySql内部函数explain
看看自己写的sql到底要涉及到多少表,多少行,使用了那些索引,根据这些信息适当的创建索引;
3)善用不同的存储引擎,MySQL有多种不同的存储引擎,InnoDB,Aria,MEMORY根据需要给不同的表选择不同的存储引擎,比如要支持transaction的话用InnoDB等;
4)表很大的时候,做分表查询,有水平分割、垂直分割。
5)读写分离,读(read)、写(create、update、delete)。
三、索引优化
— 应该创建索引的字段:
① 经常作为查询条件的字段
② 经常用在多表连接的列,例如外键
③ 经常需要排序的字段
— 应该少建或者不建索引的情况:
① 表中数据太少,增加索引基本不会带来查询速度的提升,反而浪费了存储空间。
② 经常需要插入、修改、删除操作的表
③ 表中数据重复且分布平均的字段(如“性别”)
④ 查询中很少用到不应该创建索引
⑤ 定义为text、image、bit数据类型的列不应该加索引
— 一些sql的写法会限制索引的使用:
where子句中如果使用in、or、like、!= 、<>均会导致索引不能正常使用,将<>换成>and <,将is not null换成>=chr(0)
四、SQL优化
1,务必不要使用select * ,尽量使用limit,我们要优化的目的就是尽量不去做全表扫描
2,频繁查询的where子语句的条件加上索引
3,where 子语句的连接不要使用or,这样会使引擎放弃索引,直接全表扫描
4,sql语句不要做太多关联,最好简单分开
其他优化:https://blog.csdn.net/visant/article/details/80013117
参考:https://blog.csdn.net/q602075961/article/details/71076390