电商系统数据库设计原则

数据库开发规范的制定

数据库必须使用小写字母并用下划线分割(见名知意,最好不超过32字符)

禁止使用mysql保留关键字(如有,``包裹),去http://dev.mysql.com/doc/refman/5.7/en/keywords.html

临时库表必须以tmp为前缀并以日期为后缀(tmp_)

备份库和库,必须以bak为前缀,日期为后缀(bak_)

所有存储相同数据的列名和列类型必须一致。(在多个表中的字段如user_id)

mysql5.5之前默认的存储的引擎是myisam,没有特殊要求,所有的表必须使用innodb(支持失误,行级锁,高并发下性能更好)

数据库和表的字符集统一使用utf8【要统一,避免由于字符集转换产生的乱码】。汉字utf8下暂3个字节

表和字段备注

尽量控制单表数据量的大小在500w以内(并不是mysql数据库的限制,这种限制取决于存储设置和文件系统,可以使用历史数据归档,分库分表来实现)。

注意

  1. 谨慎使用mysql分区表(分区表在物理上表现为多个文件,在逻辑上表现为一个表)。
  2. 谨慎选择分区键,跨分区查询效率可能更低
  3. 建议使用物理分表的方式管理大数据
  4. 尽量做到冷热数据分离,减小表的宽度(mysql限制最多存储4096列,行数没有限制,但是每一行的字节总数不能超过65535)【列限制好处:减少磁盘io,避免读入无用的冷数据】
  5. 禁止在表中建立预留字段(无法确认存储的数据类型,无法选择合适的类型)
  6. 禁止在数据中存储图片,文件二进制数据
  7. 禁止在线上做数据库压力测试
  8. 禁止从开发环境,测试环境直接连生产环境数据库

索引设计规范

对查询性能非常重要(双刃箭)

限制每张表上的索引数量,建议单表索引不超过5个(索引会增加查询效率,但是会降低插入和更新的速度)

禁止给表中的每一列都建立单独的索引

每个innodb表必须有一个主键(不能使用更新频繁的列作为主键),选择自增id

常见索引建立建议

  1. select ,update ,delete 语句的where从句的列
  2. 包含order by ,group by ,distinct中的字段
  3. 多表join的关联列
  4. 如何选择索引列的顺序:
  5. 区分度最高的列放在联合索引的最左侧
  6. 尽量把字段长度小的列放在联合索引的最左侧

注意

  1. 避免建立冗余索引和重复索引
  2. 尽量避免使用外键

数据库字段设计规范

优先选择符合存储需要的最小数据类型

优先使用无符号的整形来存储

优先选择存储最小的数据类型(varchar(N),N代表的是字符数,而不是字节数,N代表能存储多少个汉字)

避免使用text,blob类型

尽量把所有的列定义为not null (索引null 需要额外的空间来保存,所以需要暂用更多的内存)

使用timestamp或datetime类型来存储时间

同财务相关的金额数据,采用decimal类型(不丢失精度)

建议使用预编译语句进行数据库操作

禁止跨库查询

禁止select * 查询,消耗更多的cpu和io及网络带宽资源。

避免使用子查询,可以把子查询优化为join操作


mysql分区表

确认mysql服务器是否支持分区表:show plugins;

在逻辑上为一个表,在物理上存储在多个文件中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱强拆的鲁班七号

码字不易,梦想路上与君共勉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值