こんにちは、コンサルティング本部の松岡です。
db tech showcase 2024 1日目のC3セッションにて聴講した「SQL実行計画 - 主要RDBMS製品の比較(Oracle、 MySQL、 PostgreSQL)」のレポートをお届けします。
セッション概要
Oracle、 MySQL、 PostgreSQLを対象に、実行計画に関連することがらを比較することで、データベースに関する理解を深めることを狙ったセッションです。
セッション全体としてのストーリーは特になく、気になった点をピックアップしてお話しする形で進めます。
いずれかのRDBMS製品の実行計画についてある程度の知識があることを前提とします。上級者向けのセッションと位置づけ、懇切丁寧には説明しません。
スピーカー名:株式会社コーソル
営業本部
技術統括
渡部 亮太 様
はじめに
このセッションでは、異なるRDBMSであるOracle、 MySQL、 PostgreSQLを対象に実行計画について渡部さんが気になった点をピックアップするという形でお話いただきました。
この3つのRDBMSの実行計画にどのような違いがあるのでしょうか。
印象に残った相違点をまとめていきます。
セッション内容まとめ
- 実行計画とは
実行計画とはRDBMSがSQLを実行する際に内部的に使用される手順です。オプティマイザ統計などの情報をもとに、最適な手段だと予想される手順を実行計画に反映し作成されます。
- 索引アクセス
主キーアクセス/一意索引キーアクセス/非一意索引アクセスの全てにおいて特徴的な出力があったDBはMySQL(FORMAT=TREE)です。
驚いたのは、表名、索引名が表示されないこと。実行フェーズの前の見積もりフェーズにてデータにアクセスする「最適化」が実施されているように見えるそうです。
さらにEXPLAINコマンドによる実行計画の表示形式がいくつか用意されており、(EXPLAIN FORMAT=xxx)で表示方法を選択できます。
- 統計値の活用における注意事項
チューニング施策を立てる際に見積時統計と実行時統計と取り違えると、チューニング施策がトンチンカンになるため注意が必要です。
チューニングは実行時計画を参考に、実測を改善するように行うことが必要となります。
また行数の統計には出力行数とアクセス数の2種類があり、Oracle、PostgreSQLは出力桁数が出力され、MySQLはアクセス行数が出力されます。こちらの違いを理解し、チューニングを行うことが必要になります。
聴講した感想
業務内で実行計画を取得した直後だったため、実行計画の詳細について理解が深まり、大変勉強になりました。
今後実行計画を取得する際には、実行計画と合わせて出力される見積もり統計と実行時統計を混同しないようにすること、DBごとの違いを理解することを肝に銘じたいと思います。