MySQL设计规范

1.  数据库设计规范

数据库命名规范

数据库基本设计规范

数据库索引设计规范

数据库字段设计规范

SQL开发规范

数据库操作规范

1.1    数据库命名规范

对象使用小写字母并用下划线分隔;

禁止使用MySQL保留关键字;

对象名不要超过32个字符;

PS:其实在oracle11g之前版本,对象都是32位以下,12C好像增大到128.

临时表以tmp前缀日期后缀;

备份表以bak前缀日期后缀;

存储相同数据的列名和类型都要一致。

1.2    数据库基本设计规范

所有表使用InnoDB存储引擎;

库和表统一使用UTF8;

MySQL中UTF8下汉字占用3个字节,ASCII码占用1个字节;

表和字段添加注释;

尽量控制单表数据量的大小,建议控制500W以内;

PS:单表数据量太大,备份、恢复、修改表结构DDL都有很大问题。

PS:历史数据归档,分库分表控制单表的数据量大小。

谨慎使用分区表;(这是教案中给的建议)

PS:分区表在物理上分为多个文件,逻辑上表现为一个表,谨慎选择分区键,跨分区查询效率可能更低,建议采用物理分表的方式管理大数据。

尽量做到冷热数据分离,减小表的宽度;

PS:MySQL表最多支持4096列。

禁止在表中建立预留字段;

PS:预留字段无法选择合适的数据类型,对预留字段进行修改,会锁表影响并发。

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

PS:DB中存储指向文件服务器的图片或文件的地址信息。

禁止在线上对数据库进行压力测试;

禁止从开发测试环境直连生产库;

1.3    数据库索引设计规范

建议单表索引的数量不要超过5个;

每个InnoDB表必须有个主键;

PS:不能使用更新频繁的列作为主键,不能使用多列作为主键,

不能使用uuid、md5、hash、字符串作为主键,

主键建议使用自增ID值。

索引列建议

where从句后的列,包含在group by,order by, distinct中字段的单列索引或组合索引,多表联合的Join列。

索引列的顺序(下面优先级别从上到下由高到低):

选择性高的列在左侧(优先考虑);

字段长度小的列在左侧;

使用最频繁的列在左侧。

避免建立冗余和重复索引

如primary key(id), index(id), unique(id)à重复索引;

如index(a, b, c), index(a, b), index(a)à对a列冗余索引。

对于频繁的查询优先考虑适应覆盖索引

有点类似oracle的回表操作,直接在索引列上取出Select的列。

避免InnoDB表进行索引的二次查找。

Select a, b from tab where c = xxx;

create index index_name on tab(c, a, b);

可把随机IO转为顺序IO。

尽量避免使用外键

建立外键时,会自动在外键上建立索引;

不建议使用外键约束,但要在表之间的关联列上建立索引;

时间: 2024-10-03 23:02:46

MySQL设计规范的相关文章

MySQL设计规范与性能优化

引言 MySQL是目前使用最为广泛的关系型数据库之一,如果使用得当,可支撑企业级高并发.高可靠服务,使用不当甚至连并发量略高的个人网站都难以支撑: 就算使用了缓存,大量的数据库访问依旧在所难免,即使设置了较长的缓存有效期,而且缓存命中率较理想,但缓存的创建和过期后的重建都是需要访问数据库的: 本文主要从MySQL表结构设计规范和MySQL自身性能优化两方面来讨论该如何对MySQL数据库进行优化: MySQL表结构设计规范 1. 数据库设计命名规范 (1)数据库,数据表一律使用前缀,前缀名称一般不

MySQL 设计规范(续)

1.1    数据库字段设计规范 优先选择符合存储需要的最小的数据类型: 对于非负数据采用无符号整型进行存储: varchar(N)中N代表字符数,不是字节数(Oracle中是字节数,如中文GBK下2字节存一个汉字),即MySQL中varchar(2)可存储2个汉字,占用6个字节(UTF8). 避免使用text,blob数据类型: 常见的text类型可存储64k,一般是使用不到这么大空间: 非要使用,建议把blob或text列分离到单独的扩展表中,且避免使用select *; text, blo

mysql设计规范一

原文地址:http://www.jianshu.com/p/33b7b6e0a396 主键 表中每一行都应该有可以唯一标识自己的一列(或一组列). 一个顾客可以使用顾客编号列,而订单可以使用订单ID,雇员可以使用雇员ID 或 雇员社会保险号. 主键(primary key) 一列(或一组列),其值能够唯一区分表中的每个行.唯一标识表中每行的这个列(或这组列)称为主键.没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只设计相关的行. 虽然并不总是都需要主键,但大多数数据库设计人员都应保

MYSQL数据库设计规范与原则

MYSQL数据库设计规范 1.数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确(长度不能超过30个字符); 例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log给数据库加个前缀; 除非是备份数据库可以加0-9的自然数:user_db_20151210; 2.数据库表名命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确,多

MySQL数据库命名及设计规范

1.设计原则 1) 标准化和规范化 数据的标准化有助于消除数据库中的数据冗余.标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能.扩展性和数据完整性方面达到了最好平衡.简单来说,遵守3NF 标准的数据库的表设计原 则是:"One Fact in One Place"即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解.表之间的关系通过外键 相连接.它具有以下特点:有一组表专门存放通过键连接起来的关联数据. 举例:某个存放客户及其有关定

mysql关系(二维表)的设计规范,范式

范式,NF,normal format,就是指对表的结构的要求! 目的:1,规范结构!2,减少数据冗余! 第一范式,1NF,字段原子性 要求字段不能再分,要求字段的原子性 第二范式,2NF,非部分依赖 增加唯一主键即可!ID 范式的要求,是逐渐递增! 在满足 了 第一范式的前提下,不能出现部分依赖! 部分依赖指的是:普通字段对 主键 是完全依赖的,而不应该是依赖主键的一部分! 依赖:可以通过那个字段去决定另一个字段 因此,出现主键部分依赖的前提是,出现复合主键! 其中代课时间,开始和结束时间,没

MySQL 高性能表设计规范

良好的逻辑设计和物理设计是高性能的基石, 应该根据系统将要执行的查询语句来设计schema, 这往往需要权衡各种因素. 一.选择优化的数据类型 MySQL支持的数据类型非常多, 选择正确的数据类型对于获得高性能至关重要. 更小的通常更好 更小的数据类型通常更快, 因为它们占用更少的磁盘. 内存和CPU缓存, 并且处理时需要的CPU周期也更少. 简单就好 简单数据类型的操作通常需要更少的CPU周期. 例如, 整型比字符操作代价更低, 因为字符集和校对规则(排序规则 )使字符比较比整型比较更复杂.

MySQL数据库设计规范

转载songdeyouxiang 1.数据库命名规范采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;命名简洁明确(长度不能超过30个字符);例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log给数据库加个前缀;除非是备份数据库可以加0-9的自然数:user_db_20151210; 2.数据库表名命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确,多

MySQL字段设计规范避免使用TEXT/BLOB数据类型(坑)

一.说明假期有时间可以多去看看一些表的设计,发现了不少问题,老系统上过百的字段,里面含有大量的mediumtext,不到500万的数据量,开发规范中有要求表设计不要超过500万数据量.查看了表占用的磁盘空间120G,毫无疑问是大表,当初设计的时候就没有考虑过设计.一句话上线能用就行,管他呢. 二.MySQL规范1.单表不要超过500万条记录,同时评估单表所占用磁盘空间不要超过50G,否则考虑优化.分表等.2.禁用text字段类型,如果必须的用,也需要单独设计表. 三.禁用text字段类型原因1.