MySQL开发规范 DB组-张浩.

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

MySQL 基础技能与原理 —— 基础技能 MySQL DBA Team 彭立勋( )
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
PHP 训练营 - MySQL OA 产品部 李鑫辉 2011 年 9 月. 内容提要 & 目录 1. 介绍 (10 分钟 ) 1.1. 简介 1.2. 特点 1.3. 安装 2. 语法 (60 分钟 ) 2.1. 存储引擎 MyISAM InnoDB 特点与区别.
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
SQL 入门 SQL:Structured query language 北京传智播客教育.
第八单元 数据库MySQL应用基础 MySQL数据库应用基础 MySQ数据库操作使用 Mysql管理工具 第25章 数据库的增加/删除操作
關聯查詢.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
第2章 SQL语言初步 2.1 SQL的基本概念 2.2 基本表、索引的创建、删除和修改操作 2.3 SQL的查询语句——SELECT
第2讲 Transact-SQL语言.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
数据库技术 实践.
OceanBase 0.4:从API到SQL 日照
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
資料庫 (Database) SQL Server 2008實作
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
文科计算机小公共课规划教材 Access 程序设计.
第 10 章 更多的查詢技巧.
创建数据库 MySql创建数据库的语法: CREATE DATABASE 数据库名; 例: CREATE DATABASE mydb;
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
计算机应用基础 上海大学计算中心.
第3章 数据查询与SQL命令.
第六章 學習SQL語言.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
第 8 章 資料的 新增、修改與刪除.
課程名稱:資料庫系統 授課老師:李春雄 博士
PHP與MySQL 入門學習指南 凱文瑞克 著 第 23 章 資料型別.
第十一章 資料庫設計與權限設定.
第4章 SQL语言基础及数据库定义 4.1 基本概念 4.2 SQL Server 提供的主要数据类型 4.3 数据定义.
基于Hadoop的数据仓库Hive.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
面向高能所信息化系统的高可用数据库服务 王丽 计算中心 中科院高能所 第十八届全国科学计算与信息化会议.
第 7 章 建立資料表與 資料庫圖表.
教 师:曾晓东 电 话: 数据库技术 教 师:曾晓东 电 话:
SQL Server 2000 数据库入门.
第3章 MySQL教學範本 主從式資料庫系統 - CH3.
MySQL数据库基础与实例教程 之 MySQL表结构的管理 郭水泉.
浅谈MySql索引及锁的应用 厦门大学数据库实验室 刘颖杰 2014年3月8日.
第三章作业讲评 文洁 2012/4/10.
SQL SERVER 一些经典语句 1.
第十二章 SQL語言簡介 講授大綱: 新增資料庫 新增資料表 新增資料 修改資料 刪除資料 查詢資料 透視ASP.NET-第12章
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
第 10 章 数据库编程.
第20章 MySQL数据库.
数据库技术与应用.
PHP +MySQL快速入門 Lesson 3.
第11章 ListView延迟加载效果 授课老师:高成珍 QQ号: QQ群: 、
認識資料庫 MySQL 資料庫新增 MySQL 資料表新增 認識欄位資料表 資料新增、刪除、修改、瀏灠 資料表清空與刪除
認識資料庫 MySQL 資料庫新增 MySQL 資料表新增 認識欄位資料表 資料新增、刪除、修改、瀏灠 資料表清空與刪除
第三章作业点评 助教: 干艳桃、张榆 Contact 干艳桃
CS, ZJU 4/18/2019 Chapter 7 数据库.
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
用int类型(4字节)去存具体时间(8字节).
OceanBase 0.4:从API到SQL 日照
第三章 SQL Server数据管理.
第六類 資料庫備份與回復.
第4章 表的创建与维护 4.1 数据类型 4.2 数据完整性约束 4.3 创建数据表 4.4 修改数据表 4.5 删除数据表.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
MySQL执行计划解读 胡中泉.
資料庫應用與實作 一到六章重點、習題.
第4章 数据查询.
Presentation transcript:

MySQL开发规范 DB组-张浩

DB组做些什么事情? 目前主要负责公司的mysql,redis,oracle,sql server等存储类业务。 DB故障处理支持

目录 命名规范 表设计规范 索引设计规范 SQL语句规范 操作规范

命名规范 总的原则是可读性强,容易维护【建议】 库名,表名,字段名,索引名统一使用小写字母,数字,以下划线分割【建议】 库名,表名,字段名不要超过30个字符长度,需见名知意【建议】 库名,表名,字段名不能单独使用DB的关键字,像lock,time,date,return,user等 【必须】 非唯一索引按照“idx_字段名称[_字段名称]”,唯一索引按照“uniq_字段名称 [_字段名称]”进行命名 【必须】 视图,存储过程,函数命名规范采用动宾结构(动词+名词) [vi|sp|fn]_动作_功能意义(其他同表的命名相同)【建议】 触发器命名规范,tri_表名_[insert|update|delete]_[before|after],可以简写 【建议】

命名规范 数据库的名称为:业务名称_[业务模块]_db,eg:oms_db,oms_history_db 数据库表的名称为:[类别]_名称,eg:p_product,m_product_map_desc_attr, log_product_base等 业务系统使用数据库账号命名为:业务名称_[r|w],eg: oms_[m|s]_r,oms_[m|s]_w,oms_[m|s]_rw 个人使用数据库账号采用中文名字的拼音,zhanghao@10.37.%

表设计规范 数据库解决的核心问题 顺序,随机IO 1.读,写,事务 2.数据库的瓶颈在磁盘i/0,使sql语句产生尽可能少的i/o是我们关注的核心 顺序,随机IO 1.一次IO=(寻道时间+延迟时间) 2.数据库读数据是以数据块为单位的,mysql默认的数据块大小是16K,随机读一 次1个数据块,顺序读一次可以多个块,比如16个。

表设计规范 核心规则 表中需要有主键【必须】 表的存储引擎选择innodb【必须】 表的字符集选择utf8【必须】 表和字段要有COMMENT【必须】 表的字段数不要超过50个【建议】 控制单表的数据量在5KW以内【建议】

表设计规范 表样例

表设计规范 选择表的类型 普通表-支持事务或非事务【innodb,myisam】 分区表-登陆日志,流水类等【按照天分区,可以数据清理】 简单分表-每天(月)建一个新表统计排行榜[table_20150101] 分库分表-方便扩容,提高并发[table_[00-99]] DB分布式集群-对业务来说就一张逻辑表【mycat】

表设计规范 主键选择 选择主键总原则是小类型,有序【建议】 主键最好和业务无关【建议】 尽量不要选择字符串列【建议】 不能使用UUID,MD5作为主键【必须】 最简单的方法就是使用auto_increment列【建议】 如主键不能满足业务需求,可以使用unique索引约束业务【建议】

表设计规范 表字段设计 所有的字段必须定义为NOT NULL【必须】 字段需要有默认值。数字类型默认值0,字符类型默认'',逻辑类型默认为0, datetime 类型默认为'1970-01-01 00:00:00',timestamp类型默认值为 CURRENT_TIMESTAMP【必须】 自增序列类型的字段只能使用INT或者BIGINT,使用UNSIGNED存储非负整数 【必须】 不在数据库中使用VARBINARY、BLOB存储图片、文件等【必须】 同一个字段在整个库中要名称一样,类型一样【必须】 表的数据不要直接删除掉,设置删除标记delete_flag字段(tinyint类型,默认值 为0),用来标识字段是否被逻辑删除;【必须】 每个表中默认有create_time,update_time字段,方便追溯【必须】

表设计规范 表字段COMMENT【必须】 1)每张表/视图要有注释(comment),格式为 用途|负责人|创建日期 ,例如: 记录用户身份证号码|张三|2016-03-25; 2)字段要有注释(comment),格式为 用途|负责人|创建日期 , 例如:记录用 户性别@1:男@0:女@2:未知|李四|2016-03-25 3)如果字段为枚举类型,或普通数据类型当做枚举使用,需要列举枚举范围并说 明每个枚举值的含义 4)关联字段来源需要说明,来自哪张表的那个字段。#取自eload_user.user_id| 李四|2016-03-25; 5)| 用来分割不同项目 , # 用来标识数据来源 ,@ 用来分割多个枚举 ,: 用来 分割枚举名称和值 , 正常的描述中不要包含 | # @ :

表设计规范 尽量简单的使用数据类型【建议】 1)使用TINYINT来代替ENUM、SET类型,是否字段 2)存储精确浮点数使用DECIMAL替代FLOAT和DOUBLE 3)数据库中存放IP时,按功能确定字段类型,仅作展示功能的使用CHAR,作为 查询功能的应使用INT类型存放[inet_aton,inet_ntoa] 4)尽可能不使用TEXT、BLOB类型,如果确实需要将大字段拆分到其他表中

表设计规范 用尽量少的空间存储字段。【建议】 1) 能用int的就不用char或者varchar 2) 能用tinyint的就不用int 3) 能用varchar(20)的就不用varchar(255) 4) 年使用YEAR类型,存储日期使用字符类型,存储时间(精确到秒)使用 TIMESTAMP类型或INT【必须】

索引设计规范 索引类型 B+Tree索引,大部分都是,像主键,唯一索引,普通索引 Hash索引,memory引擎支持 全文索引,myisam,innodb5.6以上

索引设计规范 总的原则 索引是双刃剑,过多的索引会影响插入和更新的速度且影响整体性能,一般索 引数量不要超过5个 索引是双刃剑,过多的索引会影响插入和更新的速度且影响整体性能,一般索 引数量不要超过5个 在选择性高的字段是建索引,注意组合索引的顺利,利用索引的最左原则 尽量使用复合索引,而不是添加新的索引

索引设计规范 重要的sql必须使用索引【建议】 区分度最大的字段放在前面【建议】 核心sql优先考虑索引覆盖【建议】 UPDATE、DELETE语句的WHERE条件列 ORDER BY、GROUP BY、DISTINCT的字段 多表JOIN的字段 区分度最大的字段放在前面【建议】 核心sql优先考虑索引覆盖【建议】 直接从索引获取数据,不需要回表 select后面的字段和where条件的字段都是索引字段,一般是复合索引 在explain的Extra列出现Using Index提示时,就说明该select查询使用了覆盖 索引

索引设计规范 避免冗余索引【必须】 idx_a_b_c(a,b,c) idx_a(a) idx_a_b(a,b) 索引禁忌 不要在低选择性字段上建立索引,例如“性别”【建议】 不能在索引列上使用数学运算和函数运算【必须】 避免在索引列上用not、<>、!=反逻辑 不要在null的列上建索引

SQL语句规范 不能使用select *,select 后面只跟要使用的字段【必须】 避免索引失效【必须】 消耗CPU和IO、消耗网络带宽 无法使用覆盖索引 减少表结构变更带来的影响 避免索引失效【必须】 数据类型转换 使用like时,%不要放在首字符位置 不使用拼字符串的方式来完成where子句 表字段不能有表达式或是函数

SQL语句规范 充分利用前缀索引 减少与数据库的交互次数 避免使用存储过程、触发器、函数等 必须是最左前缀 不可能用到两个范围条件 INSERT ... ON DUPLICATE KEY UPDATE REPLACE INTO、INSERT IGNORE 、INSERT INTO VALUES(),(),() UPDATE … WHERE ID IN(A,B,C,…) 避免使用存储过程、触发器、函数等 让数据库做最擅长的事 降低业务耦合度 避开BUG

SQL语句规范 sql语句改写 拒绝大SQL,拆解成多条简单SQL,优先解决高并发的 SQL 同一字段,将or改写为in,不同字段,将or改为union all 用Where子句替换HAVING子句 NOT EXISTS代替关联及NOT IN效率更高,因为在子查询中执行了局部范围 扫描 拒绝大SQL,拆解成多条简单SQL,优先解决高并发的 SQL update和delete语句后面一定要带where条件[必须] 习惯性的使用explain分析sql语句

操作类规范 不在业务高峰期批量更新、查询数据库【必须】 对可能导致服务流量增长的线上活动,提前告知DBA进行 压力评估和扩容 【强烈建议】 对线上数据库结构的任何变更,均走正常流程 【必须】 任何数据库相关的BUG,及时告知DBA 【建议】 项目中详细注明常用SQL语句,便于DBA进行优化 【必须】 不能循环的执行条件相同的SQL【必须】