本記事では、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キーワードを手動で指定する必要があります。ローカルインデックスを推奨します。 |
| テーブルのフィールド数が多すぎる | テーブルのフィールド数は多すぎないようにしてください。 |