mysql开发规范最新版本_MYSQL 开发规范
数据库命名规范
所有数据库对象表名必须小写 (mybook_db)
命名要做到见名知意,不能使用mysql保留关键字
临时表 tmp_ 开头,备份表以 bak_ 开头 都以时间戳结尾
所有存储相同数据的列名和列类型必须一致
两个表的 列名和字段类型相同,这种列一般作为关联列来使用,如果字段类型不同,在进行关联查询时,会进行相应的转换,影响查询的效率。
数据库基本设计规范
所有表使用 innodb 存储引擎 (mysql5.5 以前使用 Myisam 引擎)
所有表和字段都要有备注信息 (在sql语句后面加上 comment),并使用UTF-8字符集
要尽量控制单表大小,并把冷热数据分离
禁止使用预留字段(预留字段无法见名知意,也无法确认存储的字段类型,修改预留字段会对表进行锁定,成本远高于增加字段)和在表中存储大的二进制数据
禁止在线上做数据库压力测试
禁止从开发环境,测试环境直连生成环境数据库
数据库索引设计规范
面试:
我们要在那些列上建立索引:
SELECT, UPDATE, DELETE 语句的WHERE 从句中的列
包含在 ORDER BY, GROUP BY, DISTINCT 中的字段
多表join 的关联列(不加索引性能较差)
如何选择索引列的顺序:
我们知道在联合索引中,索引列是按照从左到右来使用的,所以在建立索引时按照以下顺序建立
区分度最高的列(主键,唯一键)放在联合索引的最左侧
尽量把字段长度小的列放在联合索引的最左侧
如果上面两条都类似的情况下,将使用最频繁的列放在联合索引的左侧
覆盖索引:包含了所有查询字段(如select where从句中的列,orderby groupby中的列的索引)
索引规范:
限制每张表上的索引数量,建议单张表索引不超过5个(
innodb是按照主键索引来组织表的,所以每个表都要有主键(没有主键则按照非空唯一索引)
不使用频繁更新的列作为主键,不使用多列主键,不使用UUID,MD5,HASH,字符串列作为主键。建议使用自增ID值
避免建立冗余和重复索引(mysql和其他数据库不同, 主键就是一个非空唯一索引) primary key(id), index(id), unique index(id) # id上的主键 id上的索引 id上的唯一索引,这样就是建立了重复索引
index(a,b,c), index(a,b), index(a) # 对于a来说就是建立冗余索引,三个索引都是可以使用
尽量避免使用外键 (mysql会自动在外键上建立索引)。不建议使用外键约束,但一定在表与表之间的关联键上建立索引。外键保证数据的参照完整性,但建议在业务端实现
对频繁查询优先考虑使用覆盖索引, 避免Innodb表进行索引的二次查找,可以把随机IO变为顺序IO加快查询效率。
数据库字段设计规范
选择符合存储要求的最小的数据类型
避免使用Blob 或是 Text类型和ENUM 类型
每个字段尽可能的具有 NOT NULL属性
使用datetime 或 timestamp 类型存储时间
SQL 开发规范
使用预编译语句进行数据库操作 (一次编译,多次处理,提高效率。传递参数比传递sql语句更高效。防止sql 注入)
避免数据类型的隐式转换(隐式转换会导致索引失效) select name, phone from customer where id='123'
这里参数是字符串,而字段类型却是 int 类型,会导致隐式转换,从而使索引失效。
充分利用表上已经存在的索引(避免使用双%查询。 如 a like '%123%' 或者 a like '%123', 这两种情况都无法使用索引)。一个sql只能利用复合索引中的一列进行范围查询。使用 left join 和 not exists 来优化 not in 操作
禁止使用 select *,必须使用 select 查询 (消耗更多的io,cpu等资,无法使用覆盖索引,可减少表结构带来的影响)
禁止使用不包含字段的insert 语句,同select类似
禁止使用子查询,可以把子查询优化为 join(子查询结果集无法使用索引,产生临时表。消耗太多资源)
join 不要关联太多表(建议不超过5个,会产生临时表,影响查询效率)
减少同数据库的交互次数
禁止使用 order by rand() 进行随机排序(推荐在程序中获取随机值,然后从数据库中获取)
会把表中所有符合条件的数据加载到内存进行排序,消耗大量的cpu和io以及内存资源
where 从句禁止对列进行函数转换和计算(会导致无法使用索引) where date(createtime)='20170901' # 用下面的语句替换
where createtime >='20170901' and createtime
在明显不会有重复值时使用 UNION ALL 而不是 UNION(UNION ALL 不会对结果集进行去重。而UNION 会把所有数据放到临时中进行去重)
拆分复杂大sql 为多个小sql
数据库操作规范
超过100w的批量写操作,分批进行(大批量操作可能导致严重主从延迟,避免大事务操作)
对大表使用 pt-online-schema-change 修改表结构
mysql开发规范最新版本_MYSQL 开发规范相关推荐
- Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本的开发环境(亲测)
转至 http://blog.csdn.net/ccf19881030/article/details/9204801 写这篇博客时2D游戏引擎Cocos2d-x的最新版本为2.1.4,记得很久以 ...
- 微信小程序开发工具最新版本已更新下载(1.02.1804120)
下载地址: windows 64 . windows 32 . mac 本次更新修复信息如下: 1.修复 1.02.1804080 引入的编译条件为分包内页面时无法加载的问题 1. 更新到最新版本后 ...
- mysql 开启innodb win版本_MySQL安装与启动——Windows系统下
以下书写结合菜鸟教程以及本人理解书写. 数据库下载(开源免费) MySQL数据库下载地址https://dev.mysql.com/downloads/mysql/ 可自由选择版本,一般选择Achiv ...
- mysql数据库有哪些版本_MySQL数据库各个版本的区别
MySQL数据库各个版本的区别 MySQL数据库 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管 ...
- 低代码开发-牛刀低代码和专业开发云 JNPF快速开发平台 最新版本 框架源码 大屏
传统软件开发代码冗余复杂,很多开发思路也不适用于当下数字化转型.低代码采用模块化封装的方式,对封装好的代码模块进行拖拉拽来完成应用搭建. 开发商瞄准了企业转型的痛点,传统企业的经营模式和理念比较原始, ...
- mysql 运维 最佳实践_Mysql 开发最佳实践
1. Optimize Your Queries For the Query Cache 使用query cache来优化查询 Most MySQL servers have query cachin ...
- mysql的join语句使用_MySQL开发技巧——如何正确使用Join语句
SQL语言相信学过数据库的人都会使用,但是能正确使用SQL的人却相对不多.正确使用SQL很重要吗?当然,下面我就列出了正确使用SQL语句的几个好处: 增加数据库的处理效率,减少相应的响应时间. ...
- mysql生产环境加索引_MySQl开发和生产环境索引对比
--1.创建索引信息表 create table `t_index_update` ( `table_name` varchar(20) COLLATE gbk_bin DEFAULT NULL, ` ...
- Android开发——搭建最新版本的Android开发环境
http://www.cnblogs.com/smyhvae/p/3788534.html http://www.cnblogs.com/xdp-gacl/p/4322165.html http:// ...
最新文章
- 在spring cloud eureka中使用ip而不是hostname
- python3爬虫实例-自己动手,丰衣足食!Python3网络爬虫实战案例
- Linux下查看CPU/内存/硬盘的shell命令
- ebs查看服务状态_浅析AWS KMS密钥管理服务
- 蓝桥杯java第四届决赛第四题--九宫重排
- 5个IO口实现25个按键的扫描,他做到了!堪称一绝!
- a4988 脉宽要求_A4982/A4984/A4985和A4988设备主要针对办公室自动化市场
- SpringBoot迭代发布下的Jar瘦身实践
- Android Service是如何启动的?
- inner join ,left join ,right join区别
- Atitit TPL(事务处理语言 目录 1.1. 事务隔离级别	1 1.2. Savepoint技术	1 2. Tpl	1 2.1. 打开事务 START TRANSACTION;	1 2.2.
- 对 PInvoke 函数的调用导致堆栈不对称问题
- nifi 安装 使用案例
- 软考中级考试信息系统管理工程师怎么样??
- stay foolish, stay hungry
- 10个 安卓应用商店开发者公司账号注册(2022最新最全)
- Struts2的简单使用
- 广州大学 计算机网络实验3 使用网络协议分析器捕捉和分析协议数据包 2020版
- 减肥就来红光光浴吧,健康又安全
- 网页制作案例2-个人简历制作