数据库使用规范

索引

主键 pk_xxx

唯一 uk_xxx

普通索引 idx_xxx

业务上具有唯一性的字段(包括组合字段),必须建立唯一索引;索引带来的写的性能损失可以忽略不计,但是读性能提升是显而易见的;

根据墨菲定律,无论应用层如何保证唯一性,也不能绝对保证唯一性

varchar建立索引时,必须制定索引长度,字符串20索引长度,区分度已经达到90%以上,这样可以解决索引

左模糊和全模糊对索引失效

%keyword
%keyword %

只有右模糊索引才有效 keyword%,因为b-tree最左前端匹配特性

布尔值存储

if_xxx 类型是unsigned tinyint

小数存储

金额的存储,一般转换为分后,使用bigint

其他小数使用decimal不能用float和double,因为精度损失问题,如果超过decimal,则需要将整数和小数部分分开存放

字符存储

varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长

度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。

表规约

表必要字段

id

create_time

update_time

命名表名

t_业务名_表示动作

t_order_record
t_file_record

分库分表我们几乎很难涉及,不装逼

单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。

 

合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

性能规范

禁止3个表join(只能多次应用层读取了),join字段类型必须完全一致,关联字段建立索引

in控制在1000以内

不准使用 select * ,必须指明字段名称

易忽略的sql问题

count(列名) 不会统计NULL

count(*) 会统计NULL

判断是否为NULL,使用ISNULL()

NULL <> NULL

NULL == NULL

NULL <> 1

返回都是NULL,而不是false、true

谨慎使用${},会出现sql注入攻击

易调试性

不要使用外键与级联,外键的概念在应用层解决

级联含义:学生表中的 student_id是主键,那么成绩表中的 student_id则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新, 即为级联更新

不准使用存储过程,很难移植和调试

其他

不允许直接拿 HashMap 与 Hashtable 作为查询结果集的输出,即不能作为mybatis中resultType返回值

说明: resultClass=”Hashtable”, 会置入字段名和属性值,但是值的类型不可控

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值