AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

评论

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

在Github上标星103K爆火的Spring Security手册及源码笔记,YYDS

程序知音

Java spring security Java进阶 后端技术 java 架构

护航应用的“全科医生”,神州云科亮相四川卫生健康信息技术交流大会

通明湖

华为工单宝:制造业数字化转型利器,项目管理助力售后服务自动化

科技怪授

华为云

谁能真正替代你?AI辅助编码工具深度对比(chatGPT/Copilot/Cursor/New Bing)

Zhendong

GitHub ChatGPT New Bing Copilot

直播预约 | 邀您共同探讨虚拟数字人如何赋能教育信息化创新发展

3DCAT实时渲染

数字人 实时云渲染 虚拟数字人

测试开发岗面试前需要准备哪些内容呢?一节课带你搞定

测吧(北京)科技有限公司

测试

华为云时习知助力华为终端全球零售门店,打造数字化人才培养最佳实践

科技怪授

华为云

数据散,管理难,制造企业如何走出数字化转型困局

科技怪授

华为云

百度数据可视化Sugar BI:业务自助BI分析

百度开发者中心

百度云 大数据 sugar

百度数据可视化Sugar BI:实时滚动地图大屏

百度开发者中心

大数据 百度智能云 sugar

使用卷积神经网络实现图片去摩尔纹

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

商业智能公厕系统

光明源智慧厕所

智慧城市

拒绝“爆雷”!GaussDB(for MySQL)新上线了这个功能

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

MobTech SMSSDK|短信验证服务

MobTech袤博科技

Principle for Mac(交互式原型设计工具) v6.29.6免激活版

真大的脸盆

Mac 交互设计 Mac 软件 交互式产品原型设计工具

中小企业上云如何降本增效,开年采购不容错过!

科技怪授

华为云

Nexus3 环境配置

流火

nexus3 群晖 maven私服

NFT钱包开发链游系统搭建技术

薇電13242772558

NFT

编码的未来是根本不需要编码

引迈信息

前端 低代码 JNPF

Whats's New In Seata 1.6.x

阿里巴巴云原生

阿里云 开源 云原生 seata

极光笔记 | 如何在Shopify中使用Engagelab(上)

极光GPTBots-极光推送

市场营销 邮件发送 用户运营

玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了

极狐GitLab

DevOps Code Review 极狐GitLab 代码合并 ChatGPT

直播揭秘,人人都在聊的AI技能究竟怎么学?

科技热闻

Qualcomm QCA9880 MAXON MX530VX MIMO Mini PCIE WiFi5 Module

MAXON

QCA9880

低代码平台助力AIGC:让人工智能技术更加普及和高效

加入高科技仿生人

人工智能 低代码 AIGC 人工智能技术

小程序容器技术——组装式应用架构的新型实践

没有用户名丶

小程序容器

什么叫软件测试?如何学习?

测吧(北京)科技有限公司

测试

火焰杯”软件测试开发选拔赛河北赛区颁奖典礼落幕

测吧(北京)科技有限公司

测试

MobTech MobPush|用户行为分析

MobTech袤博科技

作业帮基于明道云开展的硬件业务数字化建设

明道云

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