本記事では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 の使用は控えてください。NULL値処理のための特別なロジックがあり、意味の把握が難しいです。 |
| 使用不含字段列表的 Insert/Replace 语句 | フィールドリストを含まないInsert/Replace文の使用は推奨されません。 |
| Update/Delete/Select 语句不带索引键 | Update/Delete/Select文にインデックスキーがないため、テーブル全体がスキャンされます。 |
| 分区表操作不带分区键 | パーティションテーブル操作にパーティションキーがないため、パーティションの剪定ができません。 |
| 索引过多 | インデックスは多すぎないようにし、冗長な重複を避けてください。 |
| 列上数据倾斜 | WHERE句内の列にデータの偏りがあります。 |
| 创建索引需要手动指定 Global/Local 关键字 | インデックス作成時にGlobal/Localキーワードを手動で指定する必要があります。ローカルインデックスを推奨します。 |
| 表字段数目过多 | テーブルのフィールド数は多すぎないようにしてください。 |