数据库表设计和优化

一 、数据库表设计原则

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

你可能感兴趣的:(MySQL数据库)