优化数据库、表结构的设计,比如:
-
合理的选用字段的数据类型,不同的数据类型的存储和检索方式不同,对应的性能也不同,尽量选用存储空间较小,长度固定的类型
-
合理地选用表的存储引擎:常用的存储引擎有MyISAM、InnoDB、Memory
- MyISAM不支持事务,表级锁,但是查询速度快
- InnoDB支持事务,行级锁
-
设计表的时候尽量遵循三大范式
- 1NF:数据库表的每一列都是不可分割的原子数据项(比如员工信息表中员工的住址‘中国北京’可以拆分成国家与城市)
- 2NF:数据库表中的每一列都和主键相关,不能只与主键的某一部分相关,主要针对联合主键而言(比如订单表中有(订单号,产品号,产品数量,产品价格,订单时间),其中订单号与产品号为联合主键,此时产品数量与产品价格只和产品号有关,应该拆分开)
- 3NF:数据表中的每一列数据都和主键直接相关,而不能间接相关(比如员工信息表中有(员工id,姓名,年龄,部门,部门领导)其中员工id为主键,此时部门领导与员工id不是直接相关,应该拆开)
-
尽量减少表的宽度(就是表中字段字段的个数)
-
读写分离:将经常增删的数据与经常select的数据尽量分开存储
-
冷热数据分离:将常用的字段与不常用的字段尽量分开存储
数据库参数配置优化,比如:
- 修改最大连接数
- 修改数据库占用的内存
优化SQL语句,比如:
- 尽量使用子查询不使用关联查询
- 不写会导致引擎放弃使用索引而进行全表扫描的sql,比如
- 避免在 where 子句中使用!=或<>操作符
- 避免在 where 子句中对字段进行 null 值判断
- 字段的前半部分不确定时不要使用模糊查询%
- 不写没有意义的查询
- 可以用表变量代替临时表
- 尽量避免大事务操作,提高系统并发能力
- 使用事务时避免一次处理太多的数据