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