mysql索引规范的整理 1、建议将单张表索引数控制在5个以内。 2、组合索引字段数不建议超过5个。 3、join禁止超过三个表。 需要join的字段,数据类型必须绝对一致。...4、严禁左模糊或全模糊,如需要用搜索引擎解决。 5、如果有orderby场景,请注意索引的有序性。 实例 1)consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。...2)ref 指的是使用普通的索引(normal index)。 3)range 对索引进行范围检索。...反例:explain 表的结果,type=index,索引物理文件全扫描,速度非常慢,这个 index 级别比较 range 还低,与全表扫描是小巫见大巫。...以上就是mysql索引规范的整理,希望对大家有所帮助。更多mysql学习指路:Mysql 收藏 | 0点赞 | 0打赏
这包括;库表创建规范、字段的创建规范、索引的创建规范以及SQL使用的相关规范,通过这些内容的讲解,让读者更好使用 MySQL 数据库,创建出符合规范的表和字段以及建出合适的索引。...road_map_5.6.sql road_map_8.0.sql 一、案例背景 此案例背景定位于使用使用一个简单的订单表,来讲解 MySQL 使用的相关规范。...包括;表的引擎、命名约束、字段长度、金额类型、更新时间、索引字段、组合索引等内容,方便大家学习以后,可以基于这些字段的规范演示讲解,在自己创建库表的时候有个参考对照,尽可能创建出性能更佳的库表和索引。...如下; 如上所列规范包括:建表相关规范、字段相关规范、索引相关规范、使用相关规范。 1. 建表相关规范 库名、表名、字段名,使用小写和下划线 _ 分割 库名、表名、字段名,不超过12个字符。...索引相关规范 要求有自增ID作为主键,不要使用随机性较强的 order_id 作为主键,会导致innodb内部page分裂和大量随机I/O,性能下降。
1.背景概述 近期应用升级上线过程中,存在删除业务表索引的变更操作,且因删除索引导致次日业务高峰时期,数据库响应缓慢的情况,经定位是缺失索引导致。...与用户沟通,虽然变更中删除索引的需求很少,但也存在此类需求。 本文从数据库层面,旨在尽可能避免类似问题发生,制定删除索引的变更规范。...2.索引删除规范 若确认需要做索引删除,可以使用Oracle提供的两个功能特性协助判断删除索引是否会有隐患。...一般原则是首先评估删除冗余索引,比如某张表同时有两个索引,索引A是c1列,索引B是c1,c2两列的复合索引,则一般可以选择删除索引A;但需要注意,如果索引B是c2和c1列的复合索引,就通常不可以删除索引...其次,对其他计划删除的索引可以按照上文的规范来评估和操作。
数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql的保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要做到见名识意...,但可以存放他们的路径或者地址 禁止做线上的数据库压力测试 禁止从开发环境,测试环境直接连接生成环境数据库 数据库字段设计规范 1、优先选择符合存储需要的最小的数据类型 原因 列的字段越大,建立索引时所需要的空间也就越大...TEXT或BLOB类型只能使用前缀索引 因为MySQL对索引字段长度是有限制的,所以TEXT类型只能使用前缀索引,并且TEXT列上是不能有默认值的。...索引设计规范 限制每张表上的索引数量,建议单张不超过5个 禁止给表中的每一列都建立单独的索引 每个Innoodb表必须有个主键 常见索引列建议 1、出现在SELECT、UPDATE、DELETE...索引set规范 尽量避免使用外键约束 1、不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引; 2、外键可用于保证数据的参照完整性,但建议在业务端实现; 3、外键会影响父表和子表的写操作从而降低性能
避免使用NULL字段 NULL字段很难查询优化 NULL字段的索引需要额外空间 NULL字段的复合索引无效 少用text/blob varchar的性能会比text高很多 实在避免不了blob...,请拆表 谨慎合理使用索引 改善查询、减慢更新 索引一定不是越多越好(能不加就不加,要加的一定得加) 覆盖记录条数过多不适合建索引,例如“性别” 不在索引做列运算 bad case:select
SQL规范: 关键字是大写. SELECT * FROM user; where 1. 条件比较 可以判断null值,=是不可以判断null值 >= <= !...逻辑运算 and | or Note: 如果你常用需要where的条件,需要添加索引,增加查询速度 group by 分组 Note:将数据相同的分为一组,然后显示出第一条的数据
强烈建议字段为 NOT NULL,并设置默认值 禁止储存图片、文件、视频等 使用 tingint 代替 ENUM 禁止使用外键 少用拆分 BLOB、TEXT字段 控制 字段数量/尽可能小的字段/命名规范...DECIIMAL - 精确数值,不是Float/Double int(3) - 后面的数字无意义 索引 index_表名_字段 联合索引字段建议不超过5个 单表索引数量5个以内 使用自增id作为主键...statement,提成性能,避免SQL注入 禁止使用 % 模糊查询(全表) 表中记录数 count(*) 用 join 链接替代 嵌套查询 尽量不使用 hints 查询拒绝 select * ,避免对索引字段使用
MySQL XA实现分布式事务的原理与应用 XA规范与DTP模型 XA规范定义了分布式事务处理(DTP)模型中事务管理器(TM)与资源管理器(RM)的交互方式。...MySQL XA实战示例 -- 事务分支定义 XA START 'xid1'; INSERT INTO operation_table VALUES (100, 'get-cdn-log'); XA END...对比分析 方案 一致性 性能 复杂度 适用场景 MySQL XA 强一致 低 低 低并发、跨库事务 数据分片 弱一致 高 中 业务边界清晰的系统 TCC/最终一致 最终一致 高 高 高并发、允许短暂不一致
一、基础规范 1) 使用InnoDB存储引擎 2) 数据库字符集使用UTF8,校对字符集使用utf8_general_ci 3) 所有表、字段都尽量添加注释 4) 库名、表名、字段名使用小写字母...,禁止超过32个字符,须见名知意 5) 非唯一索引以 “idx_字段1_字段2” 命名,唯一索引必须以 “uniq_字段1_字段2” 命名 二、查询规范 1) SQL语句尽可能简单,大的SQL...IN 10) Where字句中同一个表的不同字段组合建议小于5组(否则考虑分表) 11) 禁止单条语句同时更新多个表 12) 事务要尽量简单,整个事务的时间长度不要太长 三、表设计规范...) 6) 表必须有主键,不使用更新频繁的列做主键、尽量不使用字符串列做主键,尽量使用非空的唯一自增键做主键 四、索引设计规范 1) 单表索引数量不超过10个 2) 单个字段不要超过两个索引...(参与了运算的列不会引用索引) 8) 复合索引须符合最左前缀的特点建立索引(mysql使用复合索引时从左向右匹配) 9) 重要的SQL中where条件里的字段必须被索引 10) Where
一、命名规范 库名、表名、字段名必须使用小写字母并采用下划线分割; 库名、表名、字段名禁 止超过32个字符,须见名知意; 库名、表名、字段名支持最多64个字符,统一规范、易于辨识以及减少传输量不要超过...32; 库名、表名、字段名禁止使用MySQL保留关键字; 临时库、临时表名必须以tmp为前缀并以日期为后缀; 备份库、备份表名必须以bak为前缀并以日期为后缀; 二、基本规范 使用...避免二次分表,二次分表的难度和成本较高 按日期时间分表需符合YYYY[MM][DD][HH]格式 采用合适的分库分表策略,如千库十个表、十库百表等 单表字段数控制在20个以内 四、索引设计规范...等 让数据库做最擅长的事 降低业务耦合度,为sacleout、shading留点余地 避开BUG 避免使用大表的join MySQL最擅长的是单表的主键/二级索引查询 Join消耗较多的内存...,产生临时表 避免在数据库中进行数学运算 容易将业务逻辑和DB耦合在一起 MySQL不擅长数学运算和逻辑判断 无法使用索引 减少与数据库的交互次数 Insert…on duplicate
基础规范 表存储引擎必须使用 InnoDB 表字符集默认使用 utf8,必要时候使用 utf8mb4 说明: 1)通用,无乱码风险,汉字3字节,英文1字节 2)`utf8mb4` 是 `utf8`...,索引统计,值都更加复杂,MySQL 更难优化 2)`NULL` 需要更多的存储空间 3)`NULL` 只能采用 `IS NULL` 或者 `IS NOT NULL`,而在 `=`/`!...到 65535 恐龙化石 数千万年 unsigned int 4 无符号值:0 到约 42.9 亿 太阳 约 50 亿年 unsigned bigint 8 无符号值:0 到约 10 的 19 次方 索引规范...2)互联网高并发业务,太多索引会影响写性能 3)生成执行计划时,如果索引太多,会降低性能,并可能导致MySQL选择不到最优索引 4)异常复杂的查询需求,可以选择ES等更为适合的方式存储 复制代码 组合索引字段数不建议超过...复制代 以上内容,整理自阿里巴巴 Java开发手册和58到家MySQL军规升级版。
所有的数据库对象名称必须使用小写字母并用下划线分割(MySQL大小写敏感,名称要见名知意,最好不超过32字符)禁止在数据中存储图片,文件二进制数据(使用文件服务器)禁止在线上做数据库压力测试禁止从开发环境...)使用timestamp或datetime类型来存储时间同财务相关的金额数据,采用decimal类型(不丢失精度,禁止使用 float 和 double)所有的数据库对象名称禁止使用MySQL保留关键字临时库表必须以...字符集必须统一,避免由于字符集转换产生的乱码,汉字utf8下占3个字节)所有表和字段都要添加注释COMMENT,从一开始就进行数据字典的维护建议使用物理分表的方式管理大数据尽量做到冷热数据分离,减小表的宽度(mysql...(禁止使用物理外键,建议使用逻辑外键)尽量使用 union all 代替 union拆分复杂的大SQL为多个小SQL( MySQL一个SQL只能使用一个CPU进行计算)对于程序连接数据库账号,遵循权限最小原则超过三个表禁止...在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可。
一: 基础规范 1、使用InnoDB存储引擎 支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 2、推荐使用utf8mb4字符集 无需转码,无乱码风险, 支持emoji表情以及部分不常见汉字...高并发情况下容易造成数据库性能下降,大数据高并发业务场景数据库使用以性能优先 三:字段设计规范 1、把字段定义为NOT NULL并且提供默认值 a)null的列使索引/索引统计/值比较都更加复杂,...对MySQL来说更难优化 b)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多 c)null值需要更多的存储空间...5、为提高效率可以牺牲范式设计,冗余数据 a)不是频繁修改的字段 b)不是 varchar 超长字段,更不能是 text 字段 四:索引设计规范 1、禁止在更新十分频繁、区分度不高的属性上建立索引...五:SQL使用规范 1、禁止使用SELECT *,只获取必要的字段,需要显示说明列属性 a)消耗cpu,io,内存,带宽 b)不能有效的利用覆盖索引 c)使用SELECT *容易在增加或者删除字段后出现程序
开发规范对象命名命名规范的对象,是指数据库SCHEMA、表TABLE、字段COLUMN、索引INDEX、约束CONSTRAINTS等【强制】凡是需要命名的对象,其标识符不能超过30个字符【强制】名称必须以英文字母开头...为前缀,以日期yyyymmdd为后缀,比如 tmp_order_20160425,正常业务用到的临时表、中间表,前后缀尽量不要包含 tmp 以免造成歧义库表设计【强制】生产/UAT环境建库建表,请参考《mysql...建库建表规范》【强制】单实例的库数量不得超过20个,再多考虑拆分实例【强制】单库的表数量不得超过100个,再多考虑拆分库【强制】单表的字段数量不得超过30个,再多考虑垂直分表【强制】单表的数据量控制在2000...sql_mode为严格模式(STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION),在此模式下任何不支持的语法或者数据校验不合格的,都将直接返回错误【建议】日志类数据不建议存储在MySQL...建议】禁止使用ENUM,可使用TINYINT代替增加新的ENUM值要做DDL操作;ENUM的内部实际存储就是整数而非字符串;【建议】禁止使用OR条件,必须改为IN查询,并注意in的个数小于200旧版本mysql
⽚、文件等大数据 禁止在线上做数据库压力测试 禁⽌从测试、开发环境直连线上数据库 命名规范 库名、表名、字段名禁⽌止超过32个字符。...库名、表名、字段名禁⽌止使⽤用MySQL保留字 临时库、表名必须以tmp为前缀,并以日期为后缀,日期格式为YYYY[MM][DD][HH][mm][ss] 比如tmp_aaa_2016、tmp_aaa_...开发设计规范 禁⽌使用分区表。 拆分大字段和访问频率低的字段,分离冷热数据。 用Hash进⾏散表,表名后缀使⽤⼗进制数,下标从0开始。...每行记录物理长度不超过8KB 索引规范 索引的数量要控制: 单张表中索引数量不超过5个 单个索引中的字段数不超过5个 对字符串使⽤用前缀索引,前缀索引长度不超过8个字符 建议优先考虑前缀索引,超过20个长度的字符串列...避免在数据库中进⾏数学运算(MySQL不擅长数学运算和逻辑判断) 不要用select *,查询哪几个字段就select 这几个字段 SQL中使用到‘or’的改写为用‘in’,‘or’的效率没有‘in’的效率高
目的 规范业务系统对MySQL数据库在设计、开发、运维等阶段所必须遵循的原则,旨在控制对数据库的滥用,收敛不合理的使用形式,保障数据库安全、稳定、高效的运行以及业务运营的稳定性。...适用范围 所有使用MySQL的业务系统。 数据库设计规范 【强制】所有的表必须指定主键(Primary Key),主键是尽可能小的INT类型,并且是AUTO_INCREMENT自增长形式。...(这样不但节省存储空间,更重要的是可以提升检索速度) 【强制】库名、表名以及字段名的命名不使用MySQL保留的关键字。...数据库应用开发规范 【强制】数据库访问信息统一配置,必须可以满足一键切换访问实例。...【强制】在varchar上创建索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度。
命名规范 库名、表名、字段名必须使用小写字母,并采用下划线分割 库名、表名、字段名禁用超过32个字符。...须见名知意 库名、表名、字段名禁用使 MySQL保留字 临时库、表名必须以tmp为前缀,并以日期为后缀 备份库、表必须以bak为前缀,并以日期为后缀 基础规范 使用INNODB存储引擎 表字符集使用utf8mb4...UNSIGNED存储非负整数 INT类型固定占用4字节存储 使用timestamp存储时间 使用INT UNSIGNED存储IPV4 使用VARBINARY存储大写敏感的变 字符串 禁用在数据库中存储明文密码 索引规范...索引的用途 去重 加速定位 避免排序 覆盖索引 索引数量控制 单张表中索引数量不超过5个 单个索引中的字段数不超过5个 对字符串使用前缀索引,前缀索引长度不超过8个字符 建议优先考虑前缀索引,必要时可添加伪列并建立索引...条件列 ORDER BY、GROUP BY、DISTINCT的字段 多表JOIN的字段 区分度最大的字段放在前 核心SQL优先考虑覆盖索引 避免冗余和重复索引 索引不是越多越好 综合评估数据密度和分布
主键索引的建立,是在规范化创建表的时候就自动添加了 实例(建表时添加) mysql> create table test(id int(4) not null auto_increment,name char...创建格式: alter table 表名 add index 索引名(列名); create index 索引名 on 表名(列名); 实例(MUL就代表是普通索引): mysql> alter table...NULL:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引, 例如从一个索引列里选取最小值可以通过单独索引查找完成。...5、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 6、key 显示MySQL在查询中实际使用的索引, 若没有使用索引...Index merges 当MySQL 决定要在一个给定的表上使用超过一个索引的时候,就会出现以下格式中的一个,详细说明使用的索引以及合并的类型。
一、什么是索引 MySQL 是索引的一种数据结构,他可以帮助数据库高校的查询、更新数据表中的数据。通过一定的排序规则排列数据表中的记录,加快对表的查询。...在大量的数据中,如果没有索引需要扫描整个表,如果有了索引,那么可以快速定位。 实现数据库的唯一约束:通过创建唯一索引,可以确保表中某列或某组列的数据值具有唯一性。...优化连接操作:在多表连接查询时,索引可以帮助数据库更快的找到连接。 三、索引的分类 哈希索引 结构特点:基于哈希表实现,通过索引键的哈希值直接定位数据位置,类似字典的“键-值”映射。...优势:时间复杂度为O(1),查找速度快 局限性:1.主要:不支持范围查找、排序和模糊查询;2.哈希冲突影响性能;3.MySQL并没有选择哈希作为默认数据结构,仅Memory默认支持。...MySQL索引采用的数据结构。 2.查询方式:与B树类似,但是其可以利用叶子节点的链表结构,快速遍历范围内的所有数据。
B树索引是Mysql数据库中使用最频繁的索引类型,基本所有存储引擎都支持BTree索引。...通常我们说的索引不出意外指的就是(B树)索引(实际是用B+树实现的,因为在查看表索引时,mysql一律打印BTREE,所以简称为B树索引) 2....索引算法有 BTree算法和Hash算法 1. BTree算法 BTree是最常用的mysql数据库索引算法,也是mysql默认的算法。...在mysql中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。...所以,在我们删除数据库百万级别数据的时候,查询MySQL官方手册得知删除数据的速度和创建的索引数量是成正比的。