DB

各DB上で実行計画を取得してみた

前回、Oracle上で実行計画の取得を行ってみたが、今回は他のDB上で同様の実行計画を取得してみたので、その内容を共有する。

前提条件

下記記事の「ストアドプログラムによるデータ追加」が完了していること。

各DBのIN句で1000件を超える項目を指定してみたOracleデータベースの場合、IN句で1000件を超える項目を指定するとエラーになってしまうが、他のDBではIN句に1001件の項目を...

やってみたこと

  1. Oracleの場合の実行結果
  2. MySQLの場合の実行結果
  3. PostgreSQLの場合の実行結果
  4. SQL Serverの場合の実行結果

Oracleの場合の実行結果

Oracleの場合の実行結果は、下記記事を参照のこと。

SQL Developerを使ってOracle DBの実行計画を取得してみたSQLの性能改善を行う際、実行計画を取得することがよくある。実行計画とは、実際に実行されるプログラムの概要を提示したもので、実行計画によ...



MySQLの場合の実行結果

MySQLの場合も、「USER_DATA」テーブルのカラム「ID」に主キーのインデックスが設定されていることが確認できる。そのSQLの確認結果は、以下の通り。

MySQLの実行結果_1

また、「USER_DATA」テーブルからID=1のデータを抽出する際、インデックス検索が行われる。その際、以下のSQLを実行して、type, possible_keys, keyの値を確認することで、主キーを用いたインデックス検索が行われていることが確認できる。

MySQLの実行結果_2

なお、上記で表示されている項目については、以下のサイトを参照のこと。
https://style.potepan.com/articles/18910.html

さらに、「USER_DATA」テーブルからNAME = ‘テスト プリン1’のデータを抽出する際、インデックス検索が行われない。その際、以下のSQLを実行して、type=ALLとなっていることを確認することで、インデックス検索が行われずフルスキャンが行われていることが確認できる。

MySQLの実行結果_3
「AOMEI Partition Assistant Standard(無料)版」は便利なパーティション管理ツールだったハードディスクの記憶領域を論理的に分割し、分割された個々の領域のことを、パーティションといいます。 例えば、以下の図の場合、C/D...

PostgreSQLの場合の実行結果

PostgreSQLの場合も、「USER_DATA」テーブルのカラム「ID」に主キーのインデックスが設定されていることが確認できる。そのSQLの確認結果は、以下の通り。

PostgreSQLの実行結果_1

なお、上記SQLは、以下のサイトを参考にして作成している。
http://log.nissuk.info/2014/03/blog-post.html

また、「USER_DATA」テーブルからID=1のデータを抽出する際、インデックス検索が行われる。その際、以下のSQLを実行して、「Index Scan」と表示されることを確認することで、インデックス検索が行われていることが確認できる。

PostgreSQLの実行結果_2

さらに、「USER_DATA」テーブルからNAME = ‘テスト プリン1’のデータを抽出する際、インデックス検索が行われない。その際、以下のSQLを実行して、「Seq Scan」と表示されることを確認することで、インデックス検索が行われずフルスキャンが行われていることが確認できる。

PostgreSQLの実行結果_3
「EaseUS Todo Backup」は様々な形でバックアップ取得が行える便利ツールだったパソコン内のデータを、ファイル/パーティション/ディスク等の様々な単位でバックアップしたり、バックアップのスケジュール設定や暗号化設定も...

SQL Serverの場合の実行結果

SQL Serverの場合も、「USER_DATA」テーブルのカラム「ID」にインデックスが設定されていることが確認できる。そのSQLの確認結果は、以下の通り。

SQL Serverの実行結果_1

なお、上記SQLは、以下のサイトを参考にして作成している。
http://kslaboratory.blogspot.com/2010/01/sql.html

また、「USER_DATA」テーブルからID=1のデータを抽出する際、インデックス検索が行われる。その際、以下のSQLを実行して、「Index Seek」と表示されることを確認することで、インデックス検索が行われていることが確認できる。

SQL Serverの実行結果_2

さらに、「USER_DATA」テーブルからNAME = ‘テスト プリン1’のデータを抽出する際、インデックス検索が行われない。その際、以下のSQLを実行して、「Index Scan」と表示されることを確認することで、インデックス検索が行われずフルスキャンが行われていることが確認できる。

SQL Serverの実行結果_3

なお、「Index Seek」「Index Scan」については、以下のサイトを参照のこと。
https://use-the-index-luke.com/ja/sql/explain-plan/sql-server/operations

最後に「SET STATISTICS PROFILE OFF」とすると、実行計画の表示欄が閉じる。
SQL Serverの実行結果_4

また、SQL Serverの場合は、SQLを指定後に「実行計画」ボタンを押下することで、ビジュアルベースで実行計画を表示することができる。

SQL Serverの実行結果_5

SQL Serverの実行結果_6

要点まとめ

  • MySQL、PostgreSQLの場合は、SQLの先頭に「EXPLAIN」を付与することで、実行計画が取得できる。
  • SQL Serverの場合は、SQLの先頭に「SET STATISTICS PROFILE ON」を付与するか、実行計画ボタンを押下することで、実行計画が取得できる。