Spring Boot SQL性能測定

Oracle上でテーブルを結合しデータを取得する際、テーブル別名をつけた場合とつけなかった場合の性能を測定してみた

SQLでテーブルを結合しデータを取得する際、テーブルに別名をつけなくても実行できる場合もあるが、テーブルの別名が無いとSQLの解釈に時間がかかるため、テーブルに別名をつけた方がよい。

今回は、SQLで結合したテーブルのデータを取得する際、テーブルに別名をつけた場合とつけなかった場合それぞれでSQLの実行速度を測定するプログラムを作成してみたので、共有する。

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

前提条件

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

Oracle上でWHERE句内でIN句を利用した場合とEXISTS句を利用した場合の性能を測定してみたSQLのWHERE句でレコードの存在チェックを行う時などの表現を、IN句でもEXISTS句でも行えるが、EXISTS句は条件に一致するレ...

また、USER_DATAテーブルに、上記記事で用意した100,000件のデータが設定されていると共に、M_SEXテーブルに、以下のデータが格納されていること。
前提条件

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

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

Mapperインタフェース・Mapper XMLの内容は以下の通りで、結合するテーブルの別名をつけなかった場合・別名をつけた場合それぞれのデータを取得するSQLを用意している。

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

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

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

Spring Bootのメインクラス(DemoApplication.java)を実行した結果、コンソールログに出力される内容は以下の通りで、結合するテーブルの別名をつけた方が、SQLが速くなることが確認できる。

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

要点まとめ

  • SQLで結合したテーブルのデータを取得する際、テーブルに別名をつけた方が、SQLの実行速度が速くなる。