logo  

Java编程实用经验

Java编程实用经验
作者: 陈安廉

摘要:软件开发进阶系列


数据库设计规范


2022-03-30 14:40:57

  1. 创建时间、更新时间,尽量用触发器更新。避免业务代码中漏掉,导致以后数据迁移时的麻烦。

  2. 表名按功能模块带上简短前缀。

  3. 主键用雪花算法生成15位长整形;不超过15位是为了兼容js的长整形经度问题。

  4. 聚合查询用中间表存储索引ID;

  5. 主表和扩展表,需要作为查询条件的字段放到主表,长字段或不需要作为查询条件的字段放到扩展表。

  6. 能分表不要合表,合表的目的是为了避免连表查询。





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,一次返回太多数据,请考虑减少返回行数。