🎃
ざくっと実行計画についてまとめてみた
みなみなみなさま方、こんにちはでございます。
今回はSQLの実行計画についてちょろっと学んだので、自分の学んだことをざっくりとまとめておこうと思います。
僕と同じく最近SQLのパフォーマンスについて学び始めたよって方や、
「これから学ぶぞい!」という、勢い新幹線レベルの皆様が参考にできる記事になっていれば幸いです。
実行計画とは
実行計画とは、RDBMSがどんなふうにデータベースにアクセスするかをまとめた計画書のことです。
この実行計画を参考にクエリを改善することで、SQLのパフォーマンスを向上させることにつながります。
どうしてクエリを改善する必要があるのか
SQLという言語はもともと、「非エンジニアでも簡単にデータベースを操作できる」というようなコンセプトのもとに作られました。
しかしそんなSQLも、ほどほどに難しい言語になっているというのが実情で、何も考えずにクエリを書くと、ものすごく処理が重くなってしまったりするのです。
また、現代のアプリケーションでデータベースを使っていないものはない。
と言われるほど、データベースはシステムにとって重要なものとなっています。
つまり、SQLのパフォーマンスを向上させることは、アプリケーション自体のパフォーマンスを向上させることにつながるので、積極的にクエリの改善を行っていく必要がある。
というわけです。
実行計画はだれが作っているの??
実行計画は、RDBMSの中にいる「クエリ評価エンジン」が、次のような流れで作ってくれています。
- クエリを受け取った「パーサ」さんが、クエリをRDBMSの読めるように翻訳する
- 「オプティマイザ」さんが、実行計画をいくつか見繕ってくれる
- 「オプティマイザ」さんが、テーブルの統計情報が乗っている「カタログ」を参考に、実行計画にどれくらいのコストがかかるか評価してくれる。
- 実行計画ごとのコストを比較し、最適な実行計画が選択される。
実行計画を僕らが見る方法
実行計画は、クエリのSELECT
句の前に EXPLAIN
を付けることで確認できます。
EXPLAIN SELECT
*
FROM
hoge_table
のような感じです!
まとめ
- クエリは何も考えずに書くとパフォーマンスが悪くなる。
- パフォーマンスの改善には実行計画を参考にする。
- 実行計画はRDBMSのクエリ評価エンジンで作られる。
- 実行計画をみるには、EXPLAINを使う
以上、ざっくりと実行計画についてまとめてみました。
Discussion