写点什么

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

评论

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

基于鲲鹏DevKit原生开发光伏智能巡检平台,性能提升44%

极客天地

共铸国云智领未来| 装上“数智”引擎,助力汽车生产跑出“加速度”

天翼云开发者社区

HTML性能优化-Prerender2.0机制解读

百度Geek说

html API 企业号 2 月 PK 榜

DevData Talks | 对谈谷歌云 DORA 布道师,像谷歌一样度量 DevOps 表现

思码逸研发效能

研发效能

全球首个云渗透测试认证专家课程发布!腾讯安全领衔编制

腾讯安全云鼎实验室

云安全

A/B测试成为企业“新窗口”:增长盈利告别经验主义,数据科学才是未来

字节跳动数据平台

大数据 AB testing实战 企业号 2 月 PK 榜

模块7作业

程序员小张

「架构实战营」

研发效能DevOps推荐书单

laofo

DevOps cicd 研发效能 持续交付

Java单元测试浅析(JUnit+Mockito)

京东科技开发者

Java 单元测试 代码 JUnit Mockito

领跑政务云市场!天翼云持续深耕政务云建设

天翼云开发者社区

火热报名 | DockQuery 1.2 beta版本体验官开启招募!

BinTools图尔兹

数据库 协作 研发 体验官

长沙等保测评公司有哪些?现在有新增吗?

行云管家

等保 等级保护 等保测评 长沙

MQTT遗嘱消息(Will Message)的使用

EMQ映云科技

物联网 IoT mqtt 企业号 2 月 PK 榜 遗嘱消息

移动应用程序开发新趋势

没有用户名丶

深入理解跳表及其在Redis中的应用

京东科技开发者

redis 数据结构 算法 跳表 链接

有奖调研!第五期(2022-2023)传统行业云原生技术落地调研——金融篇

York

容器 微服务 云原生 问卷调研

天翼云iBox边缘盒子四大优势,让人工智能在边缘侧“狂飙”

天翼云开发者社区

打造合规数据闭环,加速自动驾驶技术研发

百度开发者中心

自动驾驶 人工智能’

PostgreSQL:进程结构

天翼云开发者社区

使用element-ui 的上传组件upload完成自定义上传到天翼云oss云服务器

天翼云开发者社区

更轻量的百度百舸,CCE Stack 智算版发布

百度开发者中心

云计算平台 百度百舸

云管理行业标杆产品有哪些品牌?大家重点推荐哪家?

行云管家

云计算 云服务 云管理 云管

chatGPT接入微信公众号方法总结(纯聊技术)

特立独行的猫

微信 ChatGPT 公众号接入

Zebec生态持续深度布局,ZBC通证月内翻倍或只是开始

鳄鱼视界

2023“Java基础-中级-高级”面试集结,已奉上我的膝盖

程序知音

Java java面试 金三银四 后端技术 Java面试八股文

MQTT协议Keep Alive详解

EMQ映云科技

物联网 IoT mqtt 企业号 2 月 PK 榜 半连接

第七周作业-王者荣耀商城异地多活架构设计

不爱学习的程序猿

接地电阻要小于4Ω,你知道是为什么吗?

元器件秋姐

科普 元器件 电阻 接地电阻

跨越声音障碍,虚拟数字人「手语翻译官」开发落地实践

阿里技术

人工智能 数字人 虚拟人 技术温度

瓴羊Quick BI提供移动端自助分析整体解决方案,Fine BI、Smart BI何时赶上?

小偏执o

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