首批通过分布式安全可靠测评,为关键业务系统打造
SQL Review 的诊断项
更新时间:2024-04-19 09:30:55
本文例举 SQL Review 诊断项,具体说明如下。
| 诊断项 | 描述 |
|---|---|
| 参与分区数过多 | SQL 执行时,过多的分区参与了计算,浪费系统资源。 |
| 谓词计算 | Where 子句中包含了对列的计算,导致索引无法生效。 |
| 左模糊匹配 | 使用 like "%xxx" 或者 like "%xxx%" 存在左模糊匹配,导致索引无法生效 。 |
in 数目太多 |
in 数目太多,建议不超过200个, 如 in(?,?,?..) 。 |
| 表连接数太多 | 表连接数太多,建议不超过 10 个,否则剪枝后无最优计划。 |
not in 子句没添加 not null 标识 |
not in 子句需要添加 not null 标识,避免 nested loop join 。 |
| Where 条件恒真 | Update/Delete 不带 Where 条件或者 Where 条件恒真。 |
使用 not in |
少用 not in,存在空值处理的特殊逻辑,很难把控语义。 |
| 使用不含字段列表的 Insert/Replace 语句 | 不建议使用不含字段列表的 Insert/Replace 语句。 |
| Update/Delete/Select 语句不带索引键 | Update/Delete/Select 语句不带索引键,导致全表扫描。 |
| 分区表操作不带分区键 | 分区表操作不带分区键,导致无法进行分区裁剪。 |
| 索引过多 | 索引不宜过多,避免冗余重复。 |
| 列上数据倾斜 | Where 子句中的列存在数据倾斜问题。 |
| 创建索引需要手动指定 Global/Local 关键字 | 创建索引需要手动指定 Global/Local 关键字,推荐局部索引。 |
| 表字段数目过多 | 表字段数目不宜过多。 |