1、所有数据库对象名称必须使用小写字母,并用下划线分割。

2、所有数据库对象名称禁止使用MySQL保留关键字。

3、数据库命名要见名知意,长度不超过32字符。

4、临时库表必须以tmp为前缀,以日期为后缀。

5、备份库表必须以bak为前缀,并以日期为后缀。

6、所有存储相同数据的列名和列的类型必须一致。

1、所有数据表使用Innodb存储引擎。(5.6以后Innodb默认的存储引擎,支持事务,行级锁。高并发场景性能好。)

2、数据库和表的字符集统一使用UTF-8。(统一字符集可避免因字符集转换产生的乱码问题)(UTF-8字符集中一个汉字占3个字节)

3、所有表和字段都需要加注释。(从一开始就进行数据字典的维护)

4、尽量控制单表数据量的大小,建议控制在500万行以内。(500万并不是MySQL数据库的限制)

5、谨慎使用MySQL分区表功能。(分区表在物理上表现为多个文件,在逻辑上表现为一个表)

6、尽量做到冷热数据分离,减小表的宽度。(表越宽:1、把表装载进内存缓冲池时所占用的内存越大;2、消耗更多的IO),将经常使用的列放在一个表中。

7、禁止在表中建立预留字段。

8、禁止在数据库中存储图片、文件等二进制数据。

9、禁止在线上做数据库压力测试。

10、禁止从开发环境、测试环境直接连接生成环境数据库。

1、限制每张表索引数量,建议单张表索引不超过5个

2、每个innodb表必须有一个主键,不适用频繁更新的列为主键 不适用多留主键

3、建议在select update delete语句的where从句中的列中建立索引

4、也可以在包含在order by 、group by  distinct中的字段中建立索引

5、在多表JOIN的关联列上建立索引

如何选择索引列的顺序:

1、区分度最高的列放在联合索引的最左侧(尽量选主键)

2、区分度不大的情况下,字段小的列放在联合索引的最左侧

3、以上两点相同的情况下,使用最频繁的列放在联合索引的左侧

4、避免建立重复索引和冗余索引

5、对于频繁的查询,优先考虑覆盖索引(可以避免Innodb表进行索引的二次查找)

6、不建议使用外键约束,但是一定在表与表之间的关联键上建立索引

优先选择符合存储需要的最小的数据类型(比如将字符串转化为数字类型存储,例如将IP地址转换为整型数据)

对于非负数据采用无符号整型进行存储( unsigned int)

(MySQL中的varchar(N)中的N代表的是字符数,而不是字节数,即varchar(255)是可以保存255个中文的,使用UTF-8字符集存储,varchar(255)=765个字节,因为一个字符占3个字节)

(过大的长度会消耗更多的内存)

避免使用text blob enum类型,一般varcher可以满足要求。如要使用,可以将其分离到单独的扩展表中,在查询时不能使用select * 这样的方式,而只是取出必要的列;而text或blob也只能使用前缀索引,没有默认值

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

使用datetime(存储年月日时分秒需要8个字节空间) 或timestamp(存储年月日时分秒需要4个字节空间,但是只能到2038年)类型存储时间(若使用字符串,则需要16个字节空间)。

同财务相关的金额类数据 必须使用decimal类型(精准浮点数据类型)

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

避免数据类型的隐式转换(隐式转换会导致索引失效)

充分利用表上已经存在的索引:

1、避免使用双%的查询条件 如like %w%

2、一个SQL只能利用到复合索引中的一列进行范围查询

3、使用left join 或not exists来代替not in操作(因为not in通常也会是索引失效)

应该对以后的扩展进行考虑

程序连接不同的数据库使用不同的账号,禁止跨库查询(为数据库迁移和分库分表留出余地、降低业务耦合度、避免因权限过大而产生的安全风险)

禁止使用select *,必须使用select查询。(select *方式查询会消耗更多的CPU和IO以及网络宽带资源、无法使用覆盖索引)

避免使用子查询 可转化为join操作(子查询的结果集无法使用索引,也会产生临时表操作消耗CPU和IO资源,若子查询数量大,严重影响效率)

避免使用join关联太多的表 建议不少过5个

减少同数据库的交互次数

禁止使用 order by rand()进行随机排序(会把表中所有符合条件的数据装载到内存中进行排序,消耗CPU和IO资源)

明显不会有重复值是使用union all代替union(union会把所有数据放到临时表中再进行去重操作)

拆分复杂的大sql为多个小sql(MySQL中一个SQL只能使用一个CPU进行计算,拆分后可以利用多个CPU资源)

超100万行的批量些操作 要分批多次进行操作

对大表使用pt-online-schema-change修改表结构

禁止为程序使用的账号赋予super权限,遵循权限最小原则,不准有drop权限

mysql数据库设计255_MySQL数据库设计规范相关推荐

  1. 学生管理系统的mysql数据库设计_MySQL数据库--学生管理系统数据库设计

    目录 学生管理系统数据库设计 学生管理系统功能介绍 数据库设计步骤 第1步: 找对象 第2步:找属性 第3步: 找关系 建表原则 第4步: 找特例: 等级明显而且不包含敏感数据的信息建议保持为1张表 ...

  2. 学生管理系统的mysql数据库设计_MySQL 数据库 -- 学生管理系统数据库设计

    MySQL 数据库 -- 学生管理系统数据库设计 目录 学生管理系统数据库设计 学生管理系统功能介绍 数据库设计步骤 第 1 步: 找对象 第 2 步: 找属性 第 3 步: 找关系 建表遵守原则 第 ...

  3. mysql 企业数据库设计_MySQL数据库设计

    MYSQL数据库设计规范 1.数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确(长度不能超过30个字符); 例如:user, stat ...

  4. mysql数据库设计学习---数据库设计规范化的五个要求

    一:表中应该避免可为空的列: 二:表不应该有重复的值或者列: 三: 表中记录应该有一个唯一的标识符  在数据库表设计的时候,数据库管理员应该养成一个好习惯,用一个ID号来 唯一的标识行记录,而不要通过 ...

  5. MYSQL数据库设计和数据库设计实例(一)

    数据库设计(database design):数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效的存储和管理要求,满足各种用户 ...

  6. MYSQL数据库设计和数据库设计实例(二)

    数据库设计---需求分析 1>需求分析的主要任务或者说主要的作用是:通过详细的调查现实世界要处理的对象,了解计算机系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能, 还需要考虑 ...

  7. mysql 多选数据库设计_数据库设计:多选查询与匹配

    数据库设计:多选查询与匹配 在权限管理的数据库设计中,可能会遇到 这样的问题: 查询具有某些权限的用户,权限是多选的,用户可能具有一个或多个选择的权限. 这个问题的解决方案是有多种,比较常见的有. 1 ...

  8. rbac数据库设计 mysql_rbac数据库设计

    1 rbac数据库设计 RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制分享牛原创,分享牛系列,分享牛.rbac用户角色权限资源表如何 ...

  9. 【SQL数据库设计】数据库设计【小型数据库】

    数据库设计 需求 表结构 字段类型.是否允许为null.是否有默认值 索引设计 数据库引擎的选择 根据产品原型分析,词性分析法,名词创建表或字段,动词表示关系. 数据存储:长期存储的数据, 1.主键: ...

最新文章

  1. python读取浮点数与源文件不同
  2. audio 上一首 下一首 自定义样式_总有一首网易云,藏着你忘不掉的人。
  3. 两种方法设置disabled属性
  4. 这 4 款实用小工具,能让你的电脑变得好用又骚气
  5. Linux下编译运行Go程序
  6. 如何系统自学python_如何系统地自学 Python?
  7. 海外金融巨头启示:站在SSC肩上,探索恒生电子下一征程(深度)| 国君计算机
  8. 可视化管理_供应链可视化管理作用与现状分析
  9. pe修改rpc服务器不可用,电脑rpc服务器不可用,教你电脑rpc服务器不可用怎么解决...
  10. SpringBoot + iframe 前后端实现简单实用的下载文件、导出excel案例
  11. 最受欢迎的Chrome插件Adblock屏蔽网页广告
  12. 没有基础怎么学习PLC编程?
  13. 制造业ERP系统具体操作流程是什么?
  14. ipxspx协议linux,三大协议 TCPIP NETBIOS IPX (转)
  15. 清橙OJ 1082 查找第K小元素 -- 快速排序
  16. 鼠标式光流传感器与多传感器融合
  17. 泛泰升级包下载工具Windows版介绍_下载_使用说明_编写原理[2014.3.24更新v0.3]
  18. 2015-4-11更新的pdf
  19. 百度地图点聚合功能php,百度地图js lite api 支持点聚合
  20. openwrt nas_软路由NAS浅入浅出:收藏备用,玩转软路由、NAS的40个网站

热门文章

  1. python接口测试面试_面试秘籍 | 一文搞定面试中接口测试问题
  2. Kubernetes之yaml文件
  3. mybatis 详解------ 一级缓存、二级缓存(九)
  4. foreach 页面超时php,解决php运行超时的方法
  5. mysql查询班级作业提交情况_MySQL中查询获取每个班级成绩前三名的学生信息
  6. 如何在Timeline中使用Cinemachine?
  7. 微软公布 Visual Studio 2020 上半年路线图
  8. 微软开源新字体 Cascadia Code,与 Terminal 一起开发
  9. 微软为 Windows Terminal 推出全新 logo
  10. 使用.NET Core 3.0 预览版,Web API和Visual Studio 2019进行ASP.NET Core Blazor游戏开发