## 接上文
三、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
评论