2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

宜信的 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:34759

评论

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

排查指南 | 两个案例学会从埋点排查 iOS 离线包

蚂蚁集团移动开发平台 mPaaS

mPaaS

「古老」茶产业碰上「年轻」区块链,能否擦出新火花?

CECBC

腾讯「小借条」引发的思考:区块链+的商业模式让各企业争先恐后的奥秘

CECBC

Qunar 酒店 NodeJS 覆盖率收集实践

Qunar技术沙龙

大前端 nodejs Node JavaScrip

字节架构师离职后,熬夜整理55W字Java面试手册,逆风翻盘进阿里

Java 编程 程序员 架构 面试

【六顶思考帽】学习心得

LeifChen

8月日更 六顶思考帽 创新思维

Activiti数据库表结构

金陵老街

千字真言,字字珠玑,我的Golang学习笔记,赤诚分享

奔着腾讯去

Go 语言

进化十多年,四足机器人的网红属性有改变吗?

脑极体

租房市场是流动的么?

escray

生活记录 8月日更 搜房记 租房

DevOps 调查第十年,如何借助工具实现落地?

飞算JavaAI开发助手

DevOps 基础软件 自动化平台

DevOps如何攻克研发流程六大痛点?

BoCloud博云

Apache APISIX 在 Airwallex 的应用 | 专访 Airwallex 技术平台负责人李杨

API7.ai 技术团队

Apache 开源 案例分享 api 网关 APISIX

坚持“一城市一矿山” 拾起卖争当循环产业领跑者

InfoQ 天津

替换及重置Homebrew默认源以及M1安装

一个大红包

8月日更

牛掰!“基础-中级-高级”Java程序员面试集结,看完献出我的膝盖

Java 编程 面试 IT 计算机

腾讯、阿里纷纷看好的NFT,能否成为拯救区块链的良药?

CECBC

前端基础五之jQuery基础

ベ布小禅

8月日更

如何利用 SEI 实现音画同步?

ZEGO即构

音视频 音画同步 数据流录制 flv

从头到尾没有一句废话!阿里Redis神级手册,从基础到源码

Java redis 编程 面试 阿里

赋能数据中心绿色低碳 浪潮云洲有实招

云计算

凭借一份“面试真经pdf”,我四面字节跳动,拿下1-2级offer

Java 程序员 面试 后端 计算机

Go 让 Apache APISIX 如虎添翼

API7.ai 技术团队

Apache 开源 插件 APISIX Go 语言

字节大牛的1850页Leetcode刷题笔记外泄!用实力折服众人

Java 程序员 字节跳动 面试 算法

netty系列之:netty中的懒人编码解码器

程序那些事

Java Netty nio 程序那些事

markdown不支持代码块和表格,离开这里了

DBKernel

一周信创舆情观察(8.9~8.15)

统小信uos

浅谈云上攻防——Kubelet访问控制机制与提权方法研究

腾讯安全云鼎实验室

k8s 云安全

在华为P50 Pro中,听到AI异构通信的朱弦三叹

脑极体

狂刷《Java权威面试指南(阿里版)》,冲击“金九银十”有望了

Java 程序员 架构 面试 大厂

厉害!GitHub星标70K阿里大佬手写的Spring Boot实战手册真不错

Java 编程 程序员 架构 计算机

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