Spring Boot SQL性能測定

Oracle上でWHERE句内でインデックスを利用した場合と利用しなかった場合の性能を測定してみた

SQLのWHERE句でインデックスを利用して検索すると、インデックスを利用しない場合に比べて、処理が速くなることが多い。

今回は、WHERE句内でインデックスを利用した場合と利用しなかった場合それぞれで、SQLの実行速度を測定するプログラムを作成してみたので、共有する。

なお、SQL文の性能改善を行う方法については、以下のサイトを参照のこと。
https://sites.google.com/site/orapeform/sql_minaoshi

前提条件

下記記事の実装が完了していること。

Oracle上でselect文で「*」を利用した場合とカラム名を利用した場合の性能を測定してみたSQL SELECT文を記載する際、「SELECT *」よりは「SELECT (カラム名)」を、「SELECT COUNT(*)」よりは...

インデックスの追加

USER_DATAテーブルのnameに、インデックスを追加する。その手順は、以下の通り。

1) USER_DATAテーブルのnameにインデックスを追加する前に、USER_DATAテーブルに設定されているインデックスを確認すると、以下のように、USER_DATAテーブルのidに主キーが設定されていることが確認できる。

インデックスの作成_1

2) USER_DATAテーブルのnameにインデックスを追加する。

インデックスの作成_2

3) USER_DATAテーブルのインデックスを確認すると、以下のように、USER_DATAテーブルのnameにインデックス(IDX_USER_DATA_NAME)が設定されていることが確認できる。

インデックスの作成_3



Code VillageはJavaScriptを中心としたサポート体制が充実したプログラミングスクールだったJavaScriptや、JavaScriptのフレームワーク「React」「Vue」を中心にオンラインで学習できるプログラミングスクール...

サンプルプログラムの作成

作成したサンプルプログラムの構成は、以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、前提条件のプログラムから変更したプログラムである。

Mapperインタフェース・Mapper XMLの内容は以下の通りで、インデックスの無い項目(memo)で検索した場合、インデックスのある項目(name)で検索した場合それぞれのデータを取得するSQLを用意している。

また、サービスクラスのサブクラスの内容は以下の通りで、それぞれのSQLを呼び出し、それぞれの実行時間を表示するようにしている。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-oracle-performance-index/demo



「FlexClip」はテンプレートとして利用できる動画・画像・音楽などが充実した動画編集ツールだったテンプレートとして利用できるテキスト・動画・画像・音楽など(いずれも著作権フリー)が充実している動画編集ツールの一つに、「FlexCli...

サンプルプログラムの実行結果

サンプルプログラムの実行結果は以下の通りで、検索項目にインデックスを利用した方が、SQLが速くなることが確認できる。

1) 以下を実行し、USER_DATAテーブルに100,000件のデータを追加する。

サンプルプログラムの実行結果_1_1

実行後、以下のように、レコード数が100,000件になっていることが確認できる。
サンプルプログラムの実行結果_1_2

サンプルプログラムの実行結果_1_3

2) 1)の状態でSpring Bootのメインクラス(DemoApplication.java)を実行した結果、コンソールログに出力される内容は以下の通り。
サンプルプログラムの実行結果_2_1

サンプルプログラムの実行結果_2_2

3) インデックスの無い項目(memo)で検索した場合のSQL実行結果と実行計画は以下の通りで、インデックスを利用しないで検索していることが確認できる。

サンプルプログラムの実行結果_3_1

サンプルプログラムの実行結果_3_2

4) インデックスの有る項目(name)で検索した場合のSQL実行結果と実行計画は以下の通りで、インデックスを利用して検索していることが確認できる。

サンプルプログラムの実行結果_4_1

サンプルプログラムの実行結果_4_2

要点まとめ

  • SQLのWHERE句でインデックスを利用して検索すると、インデックスを利用しない場合に比べて、処理が速くなることが多い。