- 优化思路
- 创建索引,索引对经常查询的字段创建索引,不要索引过多,过多的索引会影响写入的效率,对查询也有影响。
- 合理的数据库设计
- 按照数据库的三范式进行表结构的设计 第一范式:数据表中的每个字段都是不可拆分的最小单元,确保每一列的原子性
第二范式:满足第一范式之后,表中的每一列必须保持唯一性,都必须依赖主键
第三范式:满足第二范式之后,表中每一列只与主键直接相关而不是间接相关,字段没有冗余。 - 可以根据场景合理的反规范化:1、分割表 2、保留冗余字段 3、增加派生列
- 数据库的五大约束: 1、主键约束 2、唯一性约束 3、默认值约束 4、非空约束 5、外键约束
- 字段类型选择: 1、尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数而非INT
2、尽量使用TIMESTAMP而非DATETIME 3、避免使用NULL字段,很难查询优化占用额外索引空间
sql语句优化:
- 1、尽量少用自带的函数
- 2、连续数值条件使用BETWEEN 不用IN
- 3、不要使用select *
- 4、尽量使用数字型字段,若只含数值信息的不要设计为字符型
- 5、表之间的关联通过一个冗余字段连接比用JOIN有更好的性能
- 6、尽量使用select count(1)而不是select count(),使用select count()会引起全盘的扫描
- 7、尽量不要使用LIKE %
- 8、尽量不要在where子句中对字段进行null的判断,不然会导致引擎放弃索引而全盘扫描
- 9、避免在where子句中中使用!=或<>操作符
- 10、避免在where子句中使用or来连接条件
数据表的优化:
- 分表 :如果数据量很大,超过百万级别,则需要对表进行水平分表
如果一张表某些字段比较大并且很少使用,可以将这些字段隔离单独一张表,通过外键连接 - 读写分离: 使用负载均衡实现,写操作都往主库上写,读操作都在从服务器读
- 使用缓存