宜信的105条数据库军规(二)

2020 年 2 月 06 日

宜信的105条数据库军规(二)

## 接上文

三、Oracle 规则(执行特征)

3.1 执行特征

【规则 49】

规则说明:扫描块数与返回记录数比例过低。

规则阈值:自定义(百分比)。

规则描述:扫描大量数据但返回记录数很少,需要从逻辑上调整 SQL 语句。

【规则 50】

规则说明:子游标过多。

规则阈值:自定义(子游标数)。

规则描述:子游标过多,可能存在执行计划不稳定的情况。

【规则 51】

规则说明:elapsed_time。

规则阈值:自定义。

【规则 52】

规则说明:cpu_time

规则阈值:自定义

【规则 53】

规则说明:buffer_gets

规则阈值:自定义

【规则 54】

规则说明:disk_reads

规则阈值:自定义

【规则 55】

规则说明:direct_writes

规则阈值:自定义

【规则 56】

规则说明:executions

规则阈值:自定义

四、MySQL 规则(对象)

4.1 表、分区

【规则 57】

规则说明:超过指定规模且没有分区的表。

规则阈值:自定义(表大小,GB)。

规则描述:表的规模过大,将影响表的访问效率、增加维护成本等。常见的解决方案就是使用分区表,将大表转换为分区表。

【规则 58】

规则说明:单库数据表过多。

规则阈值:自定义(表个数)。

规则描述:单库数据表过多,将影响整体性能。必要时,进行业务逻辑的垂直拆分。

【规则 59】

规则说明:单表 (分区) 数据量过大。

规则阈值:自定义(数据规模,记录数)。

规则描述:单表 (分区) 数据表过多,将影响整体性能。必要时,进行分库、分表或定期清理、归档数据。

4.2 索引

【规则 60】

规则说明:单表索引数量过多。

规则阈值:自定义(索引数量)。

规则描述:单表索引数量过多,不仅维护成本高,而且占用更多的空间。

【规则 61】

规则说明:存在重复索引。

规则描述:索引能由另一个包含该前缀的索引完全代替,是多余索引。多余的索引会浪费存储空间,并影响数据更新性能。

【规则 62】

规则说明:索引选择率不高。

规则阈值:自定义(选择率,百分比)。

规则描述:索引选择率不高,将导致索引低效,请调整索引字段。

4.3 约束

【规则 63】

规则说明:表存在外键。

规则描述:外键资源将消耗数据库的计算能力,建议通过应用层保证数据约束。

【规则 64】

规则说明:表没有定义主键。

规则描述:没有定义主键,MySQL 会自动创建主键。这不是一种好的设计方法。

4.4 字段

【规则 65】

规则说明:存在大对象字段。

规则描述:大对象字段将影响存取性能、耗费较多空间,建议在数据库之外存储。

【规则 66】

规则说明:单表字段数过多。

规则阈值:自定义(字段数)。

规则描述:表字段数过多,将造成记录过长,单页存储记录数减少。可考虑拆表处理。

【规则 67】

规则说明:单表字段定义长度过长。

规则阈值:自定义(字段长度,单位字节)。

规则描述:应控制单表定义长度,避免过长记录。

【规则 68】

规则说明:单表主键字段定义长度过长。

规则阈值:自定义(字段长度,单位字节)。

规则描述:应控制主键字段长度,过长的主键字段会造成索引空间消耗过大。

【规则 69】

规则说明:表没有定义时间戳字段。

规则描述:时间戳字段是获取增量数据的最佳方法,请为表定义时间戳字段。

【规则 70】

规则说明:字段数据类型定义错误。

规则阈值:自定义(记录数)。

规则描述:根据字段保存内容判断,字段类型定义异常,建议选择适合的数据类型。

4.5 其他对象

【规则 71】

规则说明:单表存在函数、存储过程、触发器。

规则描述:存储过程、函数、触发器等都将消耗数据库的计算能力,建议通过应用层保证数据约束。

五、MySQL 规则(执行计划)

5.1 访问路径

【规则 72】

规则说明:大表全表扫描。

规则阈值:自定义(表大小,单位 GB)。

规则描述:对大表执行了全表扫描操作。

5.2 SELECT_TYPE

【规则 73】

规则说明:DEPENDENT UNION

【规则 74】

规则说明:SUBQUERY

【规则 75】

规则说明:DEPENDENT SUBQUERY

【规则 76】

规则说明:MATERIALIZED

【规则 77】

规则说明:UNCACHEABLE SUBQUERY

【规则 78】

规则说明:UNCACHEABLE UNION

5.3 ACCESS_TYPE

【规则 79】

规则说明:fulltext

【规则 80】

规则说明:index_merge

【规则 81】

规则说明:unique_subquery

【规则 82】

规则说明:all

【规则 83】

规则说明:index range

5.4 其他执行计划

【规则 84】

规则说明:使用临时表。

规则描述:执行过程中使用了临时表,执行计划中包括"using temporary"。

【规则 85】 规则说明:使用磁盘排序。

规则描述:执行计划中使用了磁盘排序,执行计划中包含"using filesort"字样。

六、MySQL 规则(执行特征)

6.1 执行特征

【规则 86】

规则说明:index_ratio

【规则 87】

规则说明:lock_time_sum

七、Oracle+MySQL(语句级)

7.1 查询类

【规则 88】

规则说明:select *

规则描述:禁止使用 select *,必须明确选择所需的列。

【规则 89】

规则说明:重复查询子句。

规则描述:禁止使用重复的查询子句,应使用 with as 替换子句 (仅限 Oracle) 来提升 SQL 执行效率。

【规则 90】

规则说明:查询字段引用函数。

规则描述:禁止在查询字段中引用函数 (类型转换函数、函数索引情况可忽略)。

【规则 91】

规则说明:嵌套 select 子句。

规则描述:禁止出现 select 子句的嵌套子查询,避免出现性能问题。

【规则 92】

规则说明:出现 union。

规则描述:防止出现不必要的排序动作。

【规则 93】

规则说明:多个过滤条件通过 or 连接。

规则描述:防止优化器出现选择异常。

【规则 94】

规则说明:谓词条件使用 like ‘%xxx’

规则描述:无法使用索引。

【规则 95】 规则说明:谓词中存在负向操作符。

规则描述:!=,<>,!<,!>,not exists,not。

【规则 96】

规则说明:存在子查询情况。

规则描述:这个要区分位置 (select、from、where、having 等部分)。

【规则 97】

规则说明:存在三个以上的表关联。

【规则 98】

规则说明:存在全连接或外连接。

规则描述:cross join 或 outer join 情况。

7.2 变更类

【规则 99】

规则说明:update 中出现 order by 子句。

规则描述:防止更新过程中出现不必要的排序。

【规则 100】

规则说明:update 中必须出现 where 子句。

规则描述:防止出现意外的全部更新动作。

【规则 101】 规则说明:更新主键。

规则描述:禁止出现更新主键的情况。

【规则 102】

规则说明:delete 中出现 order by 子句。

规则描述:防止删除过程出现不必要的排序。

【规则 103】

规则说明:delete 中必须出现 where 子句。

规则描述:防止出现意外的全部删除动作。

【规则 104】

规则说明:新增 SQL 文本过长规则。

【规则 105】

规则说明:新增 IN List 元素过多。

本文转载自宜信技术学院网站。
原文链接: http://college.creditease.cn/detail/320

2020 年 2 月 06 日 21:34 41

评论

发布
暂无评论
发现更多内容

在线互动课堂低延迟交互利器:高性能异步化设计与监控

SocketSide

线程模型 异步 Task 在线课堂

搞事情?Spring Boot今天一口气发布三个版本

YourBatman

Spring Boot 新特性

【总结】性能优化2

小胖子

ARTS-WEEK8

一周思进

ARTS 打卡计划

Java架构-代码分层的设计之道

我是苞谷

股权交易中心+区块链试点将开始

CECBC区块链专委会

防篡改 股权交易 可追溯 信息存证

高并发系统设计要点

南方有乔木兮

Java

Zookeeper从入门到放弃之Zookeeper典型应用场景

小隐乐乐

zookeeper 分布式 分布式锁

编程核心能力之重构

顿晓

学习方法 重构

架构师训练营 第八周 总结

Poplar

区块链如何切入供应链金融市场?

CECBC区块链专委会

性能测试 + 操作系统 + 锁

王鹏飞

设计模式之外观模式解析

七哥爱编程

程序员 设计模式 外观模式

没想到 Hash 冲突还能这么玩,你的服务中招了吗?

石头

Java 安全攻防 hashmap hash 后端开发

癌症筛查清单

Lee Chen

随笔杂谈 前端进阶训练营

TOGAF实用教程(IT帮)

周金根

【API进阶之路】无法想象!大龄码农的硬盘里有这么多宝藏

华为云开发者社区

容器 层次 API 网关 华为云

影响企业架构项目成功的8个重要步骤

周金根

比 996 更可怕的是职场 PUA

非著名程序员

职场 职场成长 职场误区 职场 PUA

应用程序研发之基础知识分层与进化

superman

JVM系列-读懂 GC 日志

Rayjun

Java JVM GC

LeetCode题解:206. 反转链表,JavaScript,While循环迭代,详细注释

Lee Chen

LeetCode 前端进阶训练营

JVM系列之:String.intern和stringTable

程序那些事

Java JVM GC 常量池 字符串

Java架构-不要成为项目风险的奴隶

我是苞谷

Java

拥抱400GE新引擎,跨越新基建的时代龙门

脑极体

企业架构实施简介

周金根

两个单向链表是否存在合并元素

周冬辉

Unix路径是如何简化算法,架构师性能优化 John 易筋 ARTS 打卡 Week 10

John(易筋)

ARTS 打卡计划

OMG组织的企业架构建模规范

周金根

一个成都程序猿眼中的成都和天府软件园,先从蚂蚁金服说起…

why技术

程序员 成都 蚂蚁金服

浅析区块链如何改变生活

CECBC区块链专委会

数字银行 供应链 身体监测 资产管理

宜信的105条数据库军规(二)-InfoQ