Database Performance Analyzer (旧Ignite)の情報からSQLチューニング実践:索引編


SQLチューニングは、データベースのパフォーマンスを向上させるために欠かせません。パフォーマンスの根本的な原因は、SQL文による可能性が高いからです。

IgniteはSQLチューニングにも役立ちます。今回は得た情報からSQLチューニングを行なう例をご紹介します。

まず今回使用するサンプルテーブルは以下のようなものです。

テーブル名は”TOSHIHIRO.EMPLOYEE_TEST”で400万件のレコードが入っている状態です。データベースはOracleを使用します。

SQL tuning for IGNITE

・E_ID:社員のIDナンバー [ PK (プライマリーキー) 付与 ]
・E_NAME:社員の名前
・E_SALARY:社員の年収

このテーブルから社員の月収が一千万以上の社員情報のみ抽出します。以下のようなSQL文を実行してみます。
SQL > select * from TOSHIHIRO.EMPLOYEE_TEST where E_SALARY/12>=10000000

結果は次のようになりました。
SQL tuning for IGNITE1

1.2秒かかっています。Igniteを使用して、このSQL文を調べてみます。
SQL tuning for IGNITE2

上の棒グラフにより、かかった時間と、どの要因によるものかが特定できます。 今回は赤いのでMemory/CPUによるものです。クリックすると解決策が掲示されます。
SQL tuning for IGNITE3

解決策から索引を付与することにより、時間を短くすることができることがわかります。 SQL Dateから今回のSQL文の実行経過も確認できます。
SQL tuning for IGNITE4

索引を使用するため、SQLチューニングを行った場合の効果も確認できます。
SQL tuning for IGNITE5

索引を付与したことにより、Costの値が小さくなってることが確認できます。

実際にSQLチューニングを行った、以下のSQL文を実行します。
SQL > select * from TOSHIHIRO.EMPLOYEE_TEST where E_SALARY>=10000000*12

結果は次のようになります。
SQL tuning for IGNITE6

大幅に時間が短縮されました。

関連したトピックス