1 建表
(1)表的大小,字段类型与长度考虑
(2)字段not Null设置
(3)字段取值范围,枚举值等设置
2 事物、索引、外键、缩表等考虑
3 sql语句优化
(0)不用模糊查询…"%xx%".,第一个百分号破坏索引,可以按实际场景去优化前后端,"%…"不破坏索引。
(1)能用between就不要用in、not in;
(2)给默认值,不要有空列作为查询条件) 这些都会导致全表查询;
(3 )尽量少嵌套查询
(4)union all 减少数据库连接
(5)where 条件尽量避免索引计算
(6)no exist、exist代替not in、in
(7)不要select *,应该select 字段
(8)慎重使用临时表、可以提高性能
(9)尽量用数字字段关联表
4 索引
4.1破坏索引的sql(不全):
(1)模糊查询:"%xx%",全模糊查新,全表扫描,第一个百分号破坏索引,可以按实际场景去优化前后端,"%…"不破坏索引。
(2)is not null破坏索引,索引列最好都为非Null。
(3)!= 限制索引,全表扫描,用or代替。
(4)or连接符,其中一个条件字段非索引,会全表扫描。
(5)count(*)全表扫描
(6) int 自动转 varchar(强制转换等);
(7)不是前缀索引(符合索引);
(8)is Null 判断也会丢失索引;
……
4.3 正确使用索引:
(1)不使用is Null
(2)不使用<>、!=,使用<,<=,=,>=,>
(3)不使用or 用union all
(4)谨慎使用not in、in,用between and代替
(5)不用%…% 模糊查新,用…%
(6)where条件不做计算,否则失去索引全表扫描
(7)where 不使用函数,否则失去索引全表扫描
(8)避免索引列出现数据类型转换
(9)索引影响insert和update,一般不超过6个。