数据库设计规范
2022-03-30 14:40:57
创建时间、更新时间,尽量用触发器更新。避免业务代码中漏掉,导致以后数据迁移时的麻烦。
表名按功能模块带上简短前缀。
主键用雪花算法生成15位长整形;不超过15位是为了兼容js的长整形经度问题。
聚合查询用中间表存储索引ID;
主表和扩展表,需要作为查询条件的字段放到主表,长字段或不需要作为查询条件的字段放到扩展表。
能分表不要合表,合表的目的是为了避免连表查询。
like模糊匹配,无法利用索引。
包含表达式计算,参与计算的列无法使用索引。
in包含超过200个元素,很可能是程序生成,字段无法使用索引。
select指定业务需要的字段,避免返回多余字段造成性能下降和资源浪费。
新建索引建议,加速SQL执行 。
超过三个表禁止join。需要join的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。
包含子查询,可以考虑采用join改写效率更高。
使用limit的深度翻页,建议采用join改写。
包含无谓词的语句,请检查是否涉及全表扫描。
使用ISNULL()来判断是否为NULL值,因为NULL与任何值的直接比较都为NULL。
请使用COUNT(*)替代count(列名)或count(常量),count(*)是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。count(列名)不会统计此列为NULL值的行。
平均扫描行超过50000,扫描行数越大,越消耗数据库资源,不仅本身的SQL慢,还可能影响其他SQL执行。
平均返回行超过5000,一次返回太多数据,请考虑减少返回行数。