mysql数据库设计255_MySQL数据库设计规范
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数据库设计规范相关推荐
- 学生管理系统的mysql数据库设计_MySQL数据库--学生管理系统数据库设计
目录 学生管理系统数据库设计 学生管理系统功能介绍 数据库设计步骤 第1步: 找对象 第2步:找属性 第3步: 找关系 建表原则 第4步: 找特例: 等级明显而且不包含敏感数据的信息建议保持为1张表 ...
- 学生管理系统的mysql数据库设计_MySQL 数据库 -- 学生管理系统数据库设计
MySQL 数据库 -- 学生管理系统数据库设计 目录 学生管理系统数据库设计 学生管理系统功能介绍 数据库设计步骤 第 1 步: 找对象 第 2 步: 找属性 第 3 步: 找关系 建表遵守原则 第 ...
- mysql 企业数据库设计_MySQL数据库设计
MYSQL数据库设计规范 1.数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确(长度不能超过30个字符); 例如:user, stat ...
- mysql数据库设计学习---数据库设计规范化的五个要求
一:表中应该避免可为空的列: 二:表不应该有重复的值或者列: 三: 表中记录应该有一个唯一的标识符 在数据库表设计的时候,数据库管理员应该养成一个好习惯,用一个ID号来 唯一的标识行记录,而不要通过 ...
- MYSQL数据库设计和数据库设计实例(一)
数据库设计(database design):数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效的存储和管理要求,满足各种用户 ...
- MYSQL数据库设计和数据库设计实例(二)
数据库设计---需求分析 1>需求分析的主要任务或者说主要的作用是:通过详细的调查现实世界要处理的对象,了解计算机系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能, 还需要考虑 ...
- mysql 多选数据库设计_数据库设计:多选查询与匹配
数据库设计:多选查询与匹配 在权限管理的数据库设计中,可能会遇到 这样的问题: 查询具有某些权限的用户,权限是多选的,用户可能具有一个或多个选择的权限. 这个问题的解决方案是有多种,比较常见的有. 1 ...
- rbac数据库设计 mysql_rbac数据库设计
1 rbac数据库设计 RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制分享牛原创,分享牛系列,分享牛.rbac用户角色权限资源表如何 ...
- 【SQL数据库设计】数据库设计【小型数据库】
数据库设计 需求 表结构 字段类型.是否允许为null.是否有默认值 索引设计 数据库引擎的选择 根据产品原型分析,词性分析法,名词创建表或字段,动词表示关系. 数据存储:长期存储的数据, 1.主键: ...
最新文章
- python读取浮点数与源文件不同
- audio 上一首 下一首 自定义样式_总有一首网易云,藏着你忘不掉的人。
- 两种方法设置disabled属性
- 这 4 款实用小工具,能让你的电脑变得好用又骚气
- Linux下编译运行Go程序
- 如何系统自学python_如何系统地自学 Python?
- 海外金融巨头启示:站在SSC肩上,探索恒生电子下一征程(深度)| 国君计算机
- 可视化管理_供应链可视化管理作用与现状分析
- pe修改rpc服务器不可用,电脑rpc服务器不可用,教你电脑rpc服务器不可用怎么解决...
- SpringBoot + iframe 前后端实现简单实用的下载文件、导出excel案例
- 最受欢迎的Chrome插件Adblock屏蔽网页广告
- 没有基础怎么学习PLC编程?
- 制造业ERP系统具体操作流程是什么?
- ipxspx协议linux,三大协议 TCPIP NETBIOS IPX (转)
- 清橙OJ 1082 查找第K小元素 -- 快速排序
- 鼠标式光流传感器与多传感器融合
- 泛泰升级包下载工具Windows版介绍_下载_使用说明_编写原理[2014.3.24更新v0.3]
- 2015-4-11更新的pdf
- 百度地图点聚合功能php,百度地图js lite api 支持点聚合
- openwrt nas_软路由NAS浅入浅出:收藏备用,玩转软路由、NAS的40个网站
热门文章
- python接口测试面试_面试秘籍 | 一文搞定面试中接口测试问题
- Kubernetes之yaml文件
- mybatis 详解------ 一级缓存、二级缓存(九)
- foreach 页面超时php,解决php运行超时的方法
- mysql查询班级作业提交情况_MySQL中查询获取每个班级成绩前三名的学生信息
- 如何在Timeline中使用Cinemachine?
- 微软公布 Visual Studio 2020 上半年路线图
- 微软开源新字体 Cascadia Code,与 Terminal 一起开发
- 微软为 Windows Terminal 推出全新 logo
- 使用.NET Core 3.0 预览版,Web API和Visual Studio 2019进行ASP.NET Core Blazor游戏开发