博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL开发设计规范
阅读量:5170 次
发布时间:2019-06-13

本文共 1943 字,大约阅读时间需要 6 分钟。

1.库命名规则:dbname_suffix,分为_dev/_test/_pre/_mertest/_perf/_prod六个环境

2.适度反范式设计,冗余表字段数据减少JOIN关联提高访问效率

3.普通索引命名:idx_字段名,联合索引命名:idx_字段名1_字段名2…,唯一索引命名:uq_字段名

4.表和字段必须加上(中文)注释

5.存储时间类型datetime/timestamp/date等,不使用char/varchar。【建议】建议当时间范围小于2037年使用TIMESTAMP类型,因为 TIMESTAMP占用空间更小

6.关键业务数据表,增加create_time和update_time字段,使用current_timestamp()函数定义默认值,方便后期数据分析和问题追溯

示例:

create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

update_time timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'

7.存储精确浮点数必须使用 DECIMAL 替代 FLOAT 和 DOUBLE

8.所有字段均显示定义为NOT NULL,不使用 DEFAULT NULL 并指定DEFAULT值

   ×   aaa varchar(32) DEFAULT NULL

   √   aaa varchar(32) NOT NULL  DEFAULT ''

   √   bbb int   NOT NULL  DEFAULT -1

9.char ,Varchar 长度适当,可预见范围内尽量小

   说明:varhcar(10) 中的数字不是字节而是字符,那么此处能存下10个汉字或字母。**

   ×   `aaa` varchar(2000) NOT NULL  DEFAULT ''

10.单表字段数量控制在50个以内,尽可能不使用TEXT、BLOB 类型,将过大字段拆分到其他表中

11.支持创建新表和添加新字段,禁止drop和rename表名和字段名(支持应用上灰度发布)

12.UPDATE、DELETE 语句需要根据 WHERE 条件添加索引

13.对长度过长的 VARCHAR 字段建立索引时, 添加 crc32 或者 MD5 Hash 字段, 对 Hash 字段建立索引

14.禁止在更新频繁、区分度不高的字段上建立索引

15.JOIN字段要创建索引

16.单个索引字段数不超过5,最好使用唯一性好的索引,单表索引数量不超过5

17.ORDER BY,GROUP BY,DISTINCT 的字段需要添加在索引的后面,否则会很消耗io、cpu计算资源

18.SELECT 语句只输出需要的字段,禁止SELECT *

19.SELECT、INSERT 语句必须显式的指明字段名称,不使用 SELECT *,不使用 INSERT INTO table()

20.写密集场景INSERT 语句使用 batch 提交(INSERT INTO table VALUES(),(),()……) ,values 的个数不应过多,控制在1000个以内

21.避免大表与大表之间的JOIN,考虑让小表去驱动大表JOIN

22.关于分页优化,两种分页查询的正确姿势:

SELECT * FROM table WHERE TIME<last_TIME ORDER BY TIME DESC LIMIT 10

SELECT * FROM table inner JOIN(SELECT id FROM table ORDER BY TIME LIMIT 10000,10) as t USING(id)

23.WHERE语句中使用IN代替OR ,但IN的值不超过1000,或改写成JOIN性能会更好

24.WHERE 条件中的非等值条件(IN、BETWEEN、<、<=、>、>=)会导致后面的条件使用不了索引

25.WHERE 条件中字段禁止运算禁止使用函数`× where id + 1 = 100

    √ where id  = 100 -1

    × where unix_timestamp('time') = 1366169490

    √ where time = FROM_UNIXTIME(1366169490) `

26.WHERE中禁止使用%前缀模糊查询,例如 LIKE “%abc”,会导致全表扫描

 

 

转载于:https://www.cnblogs.com/fxl-njfu/p/10443473.html

你可能感兴趣的文章
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>
一周TDD小结
查看>>
sizeof与strlen的用法
查看>>
Linux 下常见目录及其功能
查看>>
开源框架中常用的php函数
查看>>
nginx 的提升多个小文件访问的性能模块
查看>>
set&map
查看>>
集合类总结
查看>>
4.AE中的缩放,书签
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>
Mysql MHA高可用集群架构
查看>>
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
android 学习资源网址
查看>>
qt安装遇到的错误
查看>>
java:Apache Shiro 权限管理
查看>>
objective c的注释规范
查看>>