QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

  • 2020-02-06
  • 本文字数:2594 字

    阅读完需:约 9 分钟

宜信的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-02-06 21:34694

评论

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

软件设计原则

yupi

架构师训练营第二周作业

陈靓-哲露

优化工程师逻辑视角下的微信“拍一拍”功能

Earth_Polarbear

人工智能 微信 系统工程 优化逻辑

终于有人把 java代理 讲清楚了,万字详解!

root

Java jdk 后端 动态代理 cglib

ArrayList哪种循环效率更好你真的清楚吗

root

Java 后端 ArrayList 循环效率 方式

一款跨平台免费的开源 SQL 编辑器和数据库管理器!

JackTian

数据库 sql GitHub 开源 实用工具

游戏夜读 | RPG的美式和日式

game1night

架构师训练营 - 第2周学习总结

红了哟

LeetCode | 4. Palindrome Number 回文数

Puran

Python C# 算法 LeetCode

在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了

root

Java 后端 BigDecimal金额 Arrays.asList

效率思维模式与Zombie Scrum

易成研发中心

敏捷开发

程序员的晚餐 | 6 月 20 日 随便牛肉和翡翠白玉

清远

美食

架构师第二周学习总结

陈靓-哲露

由一次管理后台定时推送功能引发的对 RabbitMQ 延迟队列的思考 (二)

LSJ

Java RabbitMQ 延迟队列 优先级队列

从拼多多突破阿里和京东两大巨头绞杀,市值破千亿美金来看职业价值链

非著名程序员

程序员 程序人生 职业规划 职业成长

[架构师训练营] 2 依赖倒置

悬浮

架构师训练营第三周学习总结

张明森

Java操作Excel竟如此简单

生命在于折腾

Java EasyExcel

大话设计模式 | 3. SOLID原则

Puran

设计模式

[安利] 可能会让你爱上书写的工具组合!

猴哥一一 cium

Typora markdown markdown编辑器 玩转写作平台

Kafka面试题:基础27问,必须都会的呀!

Java小咖秀

大数据 kafka 分布式 队列 延时消息

啥是CPU缓存?又如何提高缓存命中率呢?

八两

架构师训练营 - 第 2 周命题作业

红了哟

区块链系列教程之:比特币的钱包与交易

程序那些事

比特币 区块链 智能合约 钱包 交易

SpringIOC 是依赖倒置吗?

yupi

如何做好职场印象管理?

石云升

职场 印象管理 职场形象

Git 基础知识学习

LeoBing

【Golang runtime学习笔记-启动过程分析】

卓丁

初始化 runtime 汇编 Go 语言

实现一个redis命令--nonzerodecr

老胡爱分享

redis 源码分析 源码阅读

策略模式解析

Seven七哥

设计模式 策略模式

golang-pprof实战笔记

卓丁

pprof 性能分析 Go 语言

宜信的105条数据库军规(二)_行业深度_韩锋_InfoQ精选文章