当前位置: 首页 > news >正文

mysql数据库开发规范

对规范的遵守可用二八原则,不要教条。为满足实际需求 可忽视部分规范。

1.索引规范
    *目标
     |--利用最小的索引成本找到需要的行记录
    
    *原则
     |--做前缀匹配
     |--选择区分度高的列做前缀索引列
     |--尽量使用重复索引 与where条件匹配
     |--避免重复索引
     |--索引列尽量包含 group by、order by所涉及的列
     `--查询结果比较大时 考虑索引覆盖

2.SQL规范
    *原则
    |--避免大事务 减少等待和竞争
    |--不要使用* 使用具体列名
    |--遇到分页查询 使用延迟关联解决(如果有打offset,可先选取ID,然后用主键id关联)
    |--避免多表查询 避免join
    |--IN元素禁止超过300个
    |--避免%前缀做模糊查询,不走索引
    |--不要一次更新大量数据(>30000)
    |--尽量使用union或in 代替or
    |--避免使用子查询 尽量使用join
    `--不使用负向查询 not in/like  使用in 反向代替


3.DDl规范
    *前提
    |--DDL会锁表,评估锁表给业务系统带来的影响

    *原则
    |--所有变更提前一天提交
    |--日常变更工作日下班后,重大变更时间沟通后确定
    |--所有DDL变更 需和研发沟通 审核后再提交
    `--所有新上线的表必须确定索引后才可上线


4.表的设计规范
    *原则
    |--使用innodb存储引擎,表的结尾必须是Engine=innodb Auto_increment=1 Default Charset=uft8mb4
    |--表必须带有物理主键 
    |    |--id int(10) unsigned primary key not null auto_increment
    |    |--id bigint(19) unsigned primary key not null auto_increment
    |    |--int(M) M 表示最大显示宽度,和数字位数也无关系。int(3),int(8) 在磁盘上都是占用 4 btyes 的存储空间
    |    `--预估数据会无限增加的表,主键一律所以用Bigint(19) unsigned
    |--禁止使用字符做主键
    |--禁用联合主键
    |--不在数据库中存储图片 文件等大数据
    `--禁止使用分区表,定期创建分区表会给系统运维造成隐患

5.列设计规范
    *原则
    |--尽量减少存储空间
    |--尽量使用数值类型+unsigned
    |--禁用blob/text字段
    |--禁用NULL值,建议在定义时都加上默认值
    |    |--NULL字段很难查询优化
    |    |--NULL字段的复合索引无效
    |    `--NULL字段的索引需要额外空间
    |--禁止使用外键
    |--使用unsigned存储非负数
    `--varchar(N) N表示的是字符数不是字节数。
        |--Mysql中一个表中所有varchar字段最大长度和是65535个字节
        `--进行排序和创建临时表时,会使用N的长度申请内存

6.命名规范
    *规范
    |--库/表/列/索引名称一律小写
    |--命名不要超过32个字符
    |--索引
    |    |--格式为idx_列名缩写
    |    `--唯一索引 uniq_列名缩写
    `--做到见名知意

 

相关文章:

  • iOS开发UI篇—字典转模型
  • 金蝶kis记账王云盘版怎么安装与注册
  • cocos2d-x中Node中重要的属性
  • Linux磁盘知识,分区与文件系统
  • mysql-5.5.36.tar.gz 在rhel 6.5上的编译安装
  • Lintcode--008(编辑距离)
  • 安全狗服云iphone版 轻松管理服务器安全
  • Ajax来实现下拉框省市区三级联动效果(服务端基于express)
  • 登陆界面不输密码点一次登陆出现一个用户名和密码不能为空(点n个出现n个)...
  • 适合程序员的个人综合意外险,最高可保100万
  • 工业无线网络标准初步了解
  • 利用KVO监视一个view的frame
  • 操作系统的主要功能
  • ubuntu server 安装 mantis bug tracker 中文配置
  • String Format 的实现
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【5+】跨webview多页面 触发事件(二)
  • 3.7、@ResponseBody 和 @RestController
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CentOS6 编译安装 redis-3.2.3
  •  D - 粉碎叛乱F - 其他起义
  • docker容器内的网络抓包
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • If…else
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript类型识别
  • SAP云平台里Global Account和Sub Account的关系
  • Vim 折腾记
  • windows下使用nginx调试简介
  • 成为一名优秀的Developer的书单
  • 程序员该如何有效的找工作?
  • 前端技术周刊 2019-01-14:客户端存储
  • 入门到放弃node系列之Hello Word篇
  • 深入浅出Node.js
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 关于Android全面屏虚拟导航栏的适配总结
  • 浅谈sql中的in与not in,exists与not exists的区别
  • # 达梦数据库知识点
  • #pragam once 和 #ifndef 预编译头
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (LeetCode) T14. Longest Common Prefix
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (篇九)MySQL常用内置函数
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)JAVA中的堆栈
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core中Emit的使用
  • .Net 代码性能 - (1)
  • .NET开发人员必知的八个网站