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