数据库设计规范(统一)

  1. 数据库命名规范
  2. 数据库基本设计规范(存储引擎的选择,字符类型的选择)
  3. 数据库索引设计规范(索引列的选择,索引的优化技巧)
  4. 数据库字段设计规范(列的字段类型)
  5. SQL开发规范(开发人员使用,指导编写优质sql)
  6. 数据库操作行为规范(运维人员使用,减少数据库故障)

数据库命名规范



- 关键字查询:https://dev.mysql.com/doc/refman/5.7/en/keywords.html
- 对于一些小的字典表,为了恢复方便,直接在数据库中复制一份(不必导出成sql文件)
- 可以使用关键字创建,但是查询时就会报错,所以还需要使用“括起来。
- 如果两个表上的关联列数据类型不同,关联时就会进行隐式数据类型转换,造成列上的数据类型失效,查询效率降低

数据库基本设计规范

Mysql5.5使用之前MyIsam是默认存储引擎


- Innodb无法满足的需求:列存储,空间数据
- UTF-8兼容性更好
- 对不同字符集的比较操作,比较前进行字符集的转换,所以使得列上的索引失效,带来性能问题
- 单表数据量较大,修改表结构,备份,恢复都会有很大的问题
- mysql并没有对单表最多存储设置限制。限制取决于存储设置和文件系统(32位系统单个文件最大不能超过2G)
- 历史数据归档主要用于日志文档(增长迅速),分库分表用于业务上
- 分区表大家误认为存储在不同的物理文件中,可以更好的利用磁盘IO。实际上分区表的不同分区文件最好存储在不同的磁盘阵列上。而我们把所有分区文件放在一起,IO的性能优化的效果并不能那么好
- mysql每个表限制最多存储4096列,并且每一行的数据大小不能超过65535个字节
- 表越宽,把表装入内存缓冲池占用内存也就越大,消耗更多IO
- select * ->读入无用的冷数据
- 垂直拆分
- 对于目前的mysql,修改一个字段的成本远远大于增加一个字段

数据库索引设计规范

  • mysql优化器在选择如何优化查询时,会根据统一信息对可以用到的每个索引进行评估,生成一个最好的执行计划。如果索引过多,增加sql优化器执行的时间,降低SQL查询的性能
  • 索引可以增加查询效率,同样也会降低插入和更新的效率
  • mysql5.6之前,一个查询只能使用一个索引,之后,合并索引(远远没有使用一个联合索引查询性能好)
  • Innodb是一种索引组织表,数据存储的逻辑顺序和索引顺序相同
  • Innodb是按照主键索引顺序来组织表的
  • 如果没有主键,mysql会选择第一非空唯一索引来选择主键,如果没有非空唯一索引,mysql会自动生成一个占6个字节的主键(性能不好)
  • 覆盖索引:包含了所有查询字段的索引
  • Innodb是使用聚集索引顺序来存储的。二级索引(叶子节点所保存的是行的主键信息),在查找到相应的键值之后,还要通过主键进行二次查询,获取数据。而在覆盖索引中,二级索引的键值就可以获取所有的数据了,避免了二次查询,减少了相关的IO操作
  • mysql在建立外键时,会自动的在外键上建立索引。
  • 不建议使用外键约束,但一定在表与表之间的关联键上建立索引
  • 使用其他方法来保证父表与子表的唯一性

索引建立经验
建立索引的目的:减少磁盘IO,过滤出更少的数据
索引建立在哪?

  • 推荐联合索引(从左到右的顺序使用)
  • mysql对关联操作的唯一方式只有一种,嵌套循环的关联方式(性能对关联列索引依赖很大)

如何选择索引列的顺序?
注意合理选择符合索引键值的顺序

区分度:列中唯一值的数量,用列中不同数据的数量和表的总行数的比例(接近于1)来计算,区分度最大的就是主键(1)和唯一索引的列

数据库字段设计规范

  • 优先选择符合存储需要的最小的数据类型
  • 对于非负型的数据来说,要优先使用无符号整型来存储(自增ID,主键……)
    • 无符号对于有符号来说,可以多出一倍存储空间
  • 避免使用TEXT,BLOB数据类型(性能很差)
    • TinyText,Text(64k),MidumText,LongText
    • 内存临时表不支持TEXT,BLOB,只能使用磁盘临时表(排序)
    • 还要进行二次查询
    • 只能使用前缀索引(索引类型是有长度限制的)
    • TEXT的列上不能有默认值
    • 建议把这种表分离到单独的扩展表中
  • 避免使用ENUM(枚举)类型
    • 字符串类型,内部以整数类性进行存储(MAX 65535)
    • 字符串转化整数很方便
    • 修改ENUM值需要使用ALTER语句(原数据锁,增加误操作几率)
    • ENUM类型的ORDER BY操作效率低,整型需要转化成字符串,需要额外操作(隐式转换,无法使用索引)
    • 禁止使用数值做为ENUM的枚举值
  • 尽可能把所有列定义为NOT NULL
  • 使用TIMESTAMP(4字节)或DATETIME(8字节)类型存储时间
  • 财务相关的金额类数据,必须使用decimal类型
    • 精准浮点:decimal。非精准浮点:float,double
    • 四个字节存储9个数字(小数点占用一个字节)

SQL开发规范

  • 预编译(一次解析,多次使用)

    • 重复使用执行计划,减少sql编译所需要的时间(相同语句可以一次解析,多次使用,提高处理效率)
    • 避免动态sql带来sql注入的问题
    • 只传参数,比传递SQL语句更高效
  • 避免数据类型的隐式转换(where中列类型和参数类型不一致时)
    • 导致索引失效
  • 充分利用表上已经存在的索引
  • 对数据库扩展考虑
      • 修改表结构,select * 会把修改的列也读取到,这会影响到mysql的稳定运营
      • 产生慢查询

数据库操作行为规范





高性能可扩展mysql(电商数据库设计构思)相关推荐

  1. php mysql电商网站设计与制作_赢在电子商务——php+mysql电商网站设计与制作

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. 电商数据库设计及架构优化实战(一) - 制定数据库开发规范

    2 准备工作 3 项目说明 4 数据库设计规范 5 数据库命名规范总结 6 数据库基础设计规范 总结 7 数据库索引设计规范 转载于:https://juejin.im/post/5c35af49e5 ...

  3. css网页设计实例代码_大型电商平台设计实例:电商平台项目工程、数据库选型、代码库...

    电商平台微服务体系架构 经过一系列的微服务设计, 下面使用一张维导图完整表示这个电商平台的微服务架构设计模型,如图 3-6 示. 这是一个为简单的电商平台微服务架构设计模型,并且使用了粗粒度的微服务划 ...

  4. 大型电商平台设计实例:电商平台项目工程、数据库选型、代码库

    电商平台微服务体系架构 经过一系列的微服务设计, 下面使用一张维导图完整表示这个电商平台的微服务架构设计模型,如图 3-6 示. 这是一个为简单的电商平台微服务架构设计模型,并且使用了粗粒度的微服务划 ...

  5. DTCC 2020 | 阿里云王涛:阿里巴巴电商数据库上云实践

    简介:第十一届中国数据库技术大会(DTCC2020),在北京隆重召开.大会以"架构革新 高效可控"为主题,重点围绕数据架构.AI与大数据.传统企业数据库实践和国产开源数据库等内容展 ...

  6. 睿乐购电商课程设计——总结

    睿乐购电商课程设计--总结 项目文件目录说明 命名说明与注意事项 ajax参考 问题记录 jquery 获取表单数据 前后端分离方案 session与cookie token 参考代码 接口注意事项 ...

  7. mysql 电商项目(一)

    mysql 电商项目 - MySQL数据库开发规范 1.数据库基本设计规范 2.索引设计规范    3.数据库字段设计规范 4.数据库SQL开发规范 5.数据库操作行为规范 转载于:https://w ...

  8. 大数据互联网架构阶段 大型电商项目数据库设计时应该注意的点

    大型电商项目数据库设计时应该注意的点 一. id的设计 int(int)类型: 性能高 , 但是分布式数据库时 , id易重复 long(bigint)类型:性能高 , 比int类型容纳的数据更多 , ...

  9. 电商后台设计:权限设计

    文章结合具体业务场景对电商后台设计中的系统权限设计的业务逻辑展开了梳理说明,并对相关问题展开了分析,希望通过此文能够加深你对电商后台设计的认识. 在说权限设计前我们先来看个现实中的实例,大家在电影里面 ...

  10. 电商后台设计:品类管理

    商品作为整个电商平台中的核心,系统中所有的业务都需要根据它来展开,所以设计一套易用.可扩展的商品模块是非常重要的.文章从品类管理的基本业务出发,对具体的功能模块展开了梳理说明,希望通过此文能够加深你对 ...

最新文章

  1. 人物丨深度学习大神Hinton推翻自己30年的学术成果另造新世界
  2. python经典案例-Python经典实例
  3. 编译openwrt时报错:g++: internal compiler error: Killed (program cc1plus)
  4. 开源一个ShellCode生成框架
  5. python中re_Python中re(正则表达式)模块学习
  6. HashMap深度解析:一文让你彻底了解HashMap
  7. 2018/7/19-纪中某C组题【jzoj3461,jzoj3462,jzoj3463,jzoj3464】
  8. vue设置img大小的属性_Vue.js自定义标签属性并获取属性,及绑定img的src属性的坑...
  9. cakephp 1.3 Views
  10. Android近场通信---高级NFC(二)
  11. 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  12. docker-compose批量管理docker容器
  13. 开头的单词_为什么U开头的单词前面有时加a,有时加an----高考语法知识运用
  14. 用Resource Hacker辅助升级相关测试
  15. 图SLAM:Noob的同时本地化和映射指南
  16. 腾讯云学生服务器如何购买
  17. 关于网站标签页的logo设置
  18. 【软件】串口助手小软件,无需安装下载即可使用
  19. java 10进制转16进制
  20. ES7.6基本操作以及SpringBoot整合ES7.6的API(RestHighLevelClient)

热门文章

  1. C#通过LPT控制打印机——txt文档读取指令打印条码
  2. 95后软件测试工程师成长指南
  3. jtopo实现左键框选,右键拖拽(拓扑图),以及设置成不能拖动
  4. TAOCP-Reading-计算机程序设计艺术阅读-1-4
  5. 获取随机经纬度、经纬度范围
  6. (附源码)小程序 记账微信小程序 毕业设计 180815
  7. Spark机器学习过程梳理
  8. 传统IT架构下面临的挑战?
  9. 最大流最小割算法入门理解
  10. b站黑马程序员的python怎么样_如何评价传智播客旗下的黑马程序员?