一文彻底搞懂MySQL建表规范

news2024/11/16 6:31:02

文章目录

  • 1. 表设计规范
  • 2. 索引规范
  • 3. SQL语句规范
  • 4. 散表规范

在这里插入图片描述

1. 表设计规范

  • 库名、表名、字段名使用小写字母,使用“_”分割,不超过12个字符。
  • 使用InnoDB存储引擎。
  • 存储精确浮点数使用DECIMAL替代FLOAT和DOUBLE。
  • 使用UNSIGNED存储非负数值,使用INT UNSIGNED存储IPv4。
  • 整形定义中不添加长度,例如使用INT而不是INT(4)。
  • 使用短数据类型,例如取值范围为0-80时,使用TINYINT UNSIGNED。
  • 不建议使用ENUM类型,使用TINYINT来代替。
  • 尽可能避免使用TEXT、BLOB类型。
  • 对于VARCHAR(N),N表示字符数而不是字节数,需要根据实际宽度选择N,尽可能小以减少内存占用。
  • 表字符集选择UTF8。
  • 使用VARBINARY存储变长字符串。
  • 存储年使用YEAR类型,存储日期使用DATE类型,存储精确到秒的时间使用TIMESTAMP类型。
  • 字段定义为NOT NULL。
  • 将过大字段拆分到其他表中,避免在数据库中使用VARBINARY、BLOB存储图片、文件等。
  • 表结构变更需要通知DBA审核。

2. 索引规范

  • 非唯一索引命名规范为“idx_字段名_字段名[ _字段名]”,唯一索引命名规范为“uniq_字段名_字段名[ _字段名]”,索引名称使用小写。
  • 索引中的字段数建议不超过5个,单张表的索引数量控制在5个以内。
  • 唯一键由3个以下整形字段组成时,可作为主键;否则,使用自增id作为主键。
  • 唯一键不与主键重复,索引字段顺序考虑字段值去重后的个数,个数多的放在前面。
  • ORDER BY、GROUP BY、DISTINCT的字段需添加在索引后面。
  • 使用EXPLAIN判断SQL语句是否合理使用索引,避免extra列出现:Using File Sort、Using Temporary。
  • UPDATE、DELETE语句需根据WHERE条件添加索引。
  • 避免使用%前缀模糊查询,如LIKE “%weibo”。
  • 对长度过长的VARCHAR字段建立索引时,添加crc32或MD5 Hash字段,并对Hash字段建立索引。
  • 合理创建联合索引,避免冗余,例如(a,b,c)相当于(a)、(a,b)、(a,b,c)。
  • 合理利用覆盖索引。
  • SQL变更需确认索引是否需要变更,并通知DBA。

3. SQL语句规范

  • 使用prepared statement可提高性能并防止SQL注入。
  • SQL语句中IN包含的值不应过多。
  • UPDATE、DELETE语句不使用LIMIT。
  • WHERE条件中必须使用合适的类型,避免MySQL进行隐式类型转化。
  • SELECT语句只获取需要的字段,不使用SELECT *。
  • 使用显式字段名称,不使用SELECT *,INSERT INTO table()。
  • 避免在SQL语句进行数学或函数运算,减少业务逻辑和DB的耦合。
  • 使用batch提交INSERT语句,values个数不应过多。
  • 避免使用存储过程、触发器、函数等,可能存在bug且增加耦合。
  • 避免使用JOIN,减少与数据库的交互次数。
  • 不使用ORDER BY RAND(),使用其他替代方法。
  • 使用合理的分页方式以提高效率。
  • 统计表中记录数时使用COUNT(*),而不是COUNT(primary_key)或COUNT(1)。
  • 禁止在从库上执行后台管理和统计类型的QUERY。

4. 散表规范

  • 控制每张表的数据量在5000万以下。
  • 可以结合使用散表方法,包括hash、range、lookup table。
  • 对于使用md5等hash算法进行散表,表名后缀使用16进制,例如user_ff。
  • 推荐使用CRC32求余或类似算术算法进行散表,表名后缀使用数字,数字从0开始并等宽,例如散100张表,后缀从00到99。
  • 使用时间散表时,表名后缀必须使用特定格式,例如按日散表命名为user_20110209,按月散表命名为user_201102。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1508777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基础学习:常用命令

目录结构及其常用命令 处理目录的常用命令: ls :列出目录及文件名cd:切换目录pwd:显示目前的目录mkdir:创建一个新的目录rmdir:删除一个空的目录cp:复制文件或目录rm:删除文件或目录…

Redis核心数据结构之字典(一)

字典 概述 字典又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种保存键值对(key-value pair)的抽象数据结构,在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和…

Unity类银河恶魔城学习记录9-1 9-2 P89,90 Character stats - Stat script源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Stat.cs using System.Collections; using System.Collections.Generic; us…

SSM整合项目(删除家居 + 分页查询)

1.删除家居 1.需求分析 2.编写Service层 1.FurnService.java 添加方法 //删除家居public void del(Integer id);2.FurnServiceImpl.java 实现方法 Overridepublic void del(Integer id) {furnMapper.deleteByPrimaryKey(id);}3.单元测试 Testpublic void del() {furnService.…

超越 Siri 和 Alexa:探索LLM(大型语言模型)的世界

揭秘LLM:语言模型新革命,智能交互的未来趋势 近年来,虚拟助手的世界发生了重大转变。 虽然 Siri 和 Alexa 本身就是革命性的,但一种称为大型语言模型 (LLM) 的新型人工智能正在将虚拟助手的概念提升到一个全新的水平。 在这篇博文…

面试官:线程调用2次start会怎样?我支支吾吾没答上来

写在开头 在写完上一篇文章《Java面试必考题之线程的生命周期,结合源码,透彻讲解!》后,本以为这个小知识点就总结完了。 但刚刚吃晚饭时,突然想到了多年前自己面试时的亲身经历,决定再回来补充一个小知识点&#xff…

Mybatis-Plus——04,自动填充时间(新注解)

自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…

汽车软件市场迅猛扩张,Perforce Helix Core与Helix IPLM助力汽车软件开发的版本控制及IP生命周期管理

汽车软件世界正处于持续变革和转型之中。从自动驾驶汽车到电动汽车和先进的驾驶辅助系统,汽车软件的集成度和复杂性不断提升。 据美国电气与电子工程师协会的研究,如今大多数汽车都集成了超过1亿行代码,而仅仅十年前,这种水平的汽…

正则表达式 || 遇到字符串里面有() 就在括号后面换行

<template><div class"vertical-layout"><header><h1>testPage</h1><p>(1)第一行内容xxxxxxxxx&#xff08;2&#xff09;第二行内容xxxxxxx(3)第三行内容</p></header><main><el-button click"goToO…

掌握Mongodb,看完这篇文章就够了

目录 1.概念 2.操作 2.1数据库操作 2.2集合操作 2.3数据操作 3.查询 4.常用技术 5.python与MongoDB 1.概念 MongoDB是一种非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;它以灵活的文档存储格式&#xff08;BSON&#xff09;和强大的查询能…

数据集踩的坑及解决方案汇总

数据集踩的坑及解决方案汇总 数据集各种格式构建并训练自己的数据集汇总Yolo系列SSDMask R-CNN报错 NotADirectoryError: [Errno 20] Not a directory: /Users/mia/Desktop/P-Clean/mask-RCNN/PennFudanPed2/labelme_json/.DS_StoreFaster R-CNN数据的格式转换划分数据集设定内…

5天获限定访问学者Offer|新加坡南洋理工大学申请公派成功

L老师拟申报某公派访问学者项目&#xff0c;要求半个月内获得新加坡国立大学或者南洋理工大学的邀请函。我们利用广泛的资源和丰富的申请经验&#xff0c;高效运作&#xff0c;仅仅5天就获得了新加坡南洋理工大学的邀请函&#xff0c;提前完成申请人的委托。 L老师背景&#xf…

OpenStack安装步骤

一、准备OpenStack安装环境 1、创建实验用的虚拟机实例。 内存建议16GB&#xff08;8GB也能运行&#xff09;CPU&#xff08;处理器&#xff09;双核且支持虚拟化硬盘容量不低于200GB&#xff08;&#xff01;&#xff09;网络用net桥接模式 运行虚拟机 2、禁用防火墙与SELin…

力扣题目训练(18)

2024年2月11日力扣题目训练 2024年2月11日力扣题目训练561. 数组拆分566. 重塑矩阵572. 另一棵树的子树264. 丑数 II274. H 指数127. 单词接龙 2024年2月11日力扣题目训练 2024年2月11日第十八天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括简单题3道、中等…

使用Docker实现Jenkins+Python + Pytest +Allure 接口自动化

一、Jenkins搭建 参考《Docker 安装 Jenkins》 进入 jenkins 容器 CLI 界面 docker exec -itu root jenkins /bin/bash二、准备条件 1、替换镜像内源 为了安装wget&#xff0c;默认用yum会安装不上wget命令&#xff0c;参考文章《docker容器内如何更换yum源【只想换成国内…

window Zookeeper 启动;

文章目录 前言一、Zookeeper 介绍&#xff1a;二、window 使用&#xff1a;2.1 下载&#xff1a;2.2 启动2.3 连接&#xff1a; 总结 前言 本文对window Zookeeper zk 启动 进行介绍&#xff1b; 一、Zookeeper 介绍&#xff1a; ZooKeeper 是一个开源的分布式协调服务&#…

软考攻略/软考详解/软考等级/软考科目

目录 前言 一、软考是什么 二、证书样式 三、软考介绍 3.1 什么是软考? 3.2 通过了软考&#xff0c;就算有职称了么? 3.3 哪些人可以参加软考? 3.4 软考设置了哪些资格? 3.5 哪些资格含金量比较高呢?报考建议? 四、中级资格推荐以下几个: 计算机软件类 --软件…

第十五届蓝桥杯-UART接收不定长指令的处理

学习初衷&#xff1a; 不仅仅为了比赛&#xff01; 目录 一、问题引入 二、UART常用的三种工作模式 1.UART工作在中断模式 2.UART工作在DMA模式下 3.uart工作在接收转空闲的模式下 三、获取指令中需要的数据 四、printf函数的实现 一、问题引入 问题引入&#xff1a;请…

23.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-实现配置工具数据结构

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;22.加载配置文件…

MinGW-w64的下载与安装

文章目录 1 下载2 安装3 配置环境变量4 验证 1 下载 官网地址&#xff1a;https://www.mingw-w64.org/github地址&#xff1a;https://github.com/niXman/mingw-builds-binaries/releases windows下载 跳转github下载 版本号选择&#xff1a;13.2.0是GCC的版本号&#xff1b…