【DB】オプティマイザについてザックリ知る

【DB】オプティマイザについてザックリ知る

はじめに

コジマです。

はじめに注意事項ですが、
筆者もめっちゃ詳しいわけじゃないです。

会話をするためにこのくらい知ってれば大丈夫のレベルです。

オプティマイザとはなんなのか

オプティマイザはクエリプランを最適化するコンポーネントのことを指します。

ここで言うコンポーネントは「機能」くらいにとらえていただければ問題ないです。
さらに砕いた説明をすれば「効率のいいクエリを実行するための機能」だと思ってください。

オプティマイザはどんなことをするのか

大まかに3つのことをしています。

  • テーブルにアクセスする順序を決める
  • インデックスを参照するかどうかを決める
  • 計算方法や順番を決める

テーブルA,Bにアクセスするときに、「A=>Bの順番にアクセスするよりB=>Aの順番にアクセスしたほうが速いで」とか
「このインデックス定義してるけど、フルスキャンしたほうが速いで」とか
「インデックス無視した順番で出力したほうが速いわ」とかを考えてやってくれてます。

クエリプランのコストが低い方法を選んでくれてるんですね。

主にインデックスを設計するときにオプティマイザとうまく付き合う必要があります。
オプティマイザのことを知らないと、なんでインデックス貼ったのに効いてないんだ。とかなっちゃいますからね。

最後に、オプティマイザに関する問題が応用情報の過去問で見つかったのでやってみましょう。
出典:平成25年度 秋期 応用情報技術者試験 午前 問28

RDBMSのコストベースのオプティマイザの機能の説明として,適切なものはどれか。

ア:RDBMSが収集した統計情報を基に予測した実行計画を比較して,アクセスパスを選択する。
イ:アプリケーションプログラムの動きを基に予測したアプリケーション全体の実行計画を比較して,アクセスパスを選択する。
ウ:インデックスが定義された列では,必ずいずれかのインデックスを用いたアクセスパスを選択する。
エ:複数のアクセスパスが使用可能な場合は,ルールの優先度が上位のアクセスパスを選択する。

この記事読んでくれた人は「ア」だとすぐに分かったと思います。
「イ」はアプリケーション全体を見るわけじゃなくてクエリのコストを見てるのでバツ
「ウ」はインデックス見ないほうがいいと思ったら見ないのでバツ
「エ」はルールの優先度が上位ではなく、クエリのコストが低いものを選ぶのでバツ
ですね。

さいごに

参考サイトは以下
https://docs.microsoft.com/ja-jp/sql/relational-databases/query-processing-architecture-guide?view=sql-server-ver15

公式のドキュメントを隅から隅まで理解しようと思うと沼なので
こうして噛み砕くことを意識しております。

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

もっと学びたい人はこちら

SQLをもっと学びたいエンジニアのためにおすすめのUdemy講座を紹介いたします!

SQLはじめましての人!まずあなたの3時間をください。
この講座でまずこれだけは覚えてくれ!という内容をしっかり押さえることができます。
SQLはプログラミング言語がなんであれ、システム開発に必要になります。
この講座を見て最低限必要な知識を身に着けて実践で貢献できるようになりましょう!
3時間で学ぶ SQL ・データベース 超入門【丁寧な解説+演習問題で SQL データ抽出の基本が身につく】標準 SQL

データベースの設計について学べる講座です。
設計について学べる教材は少ないので、実務でデータベースを触る人にはとてもうれしい講座です。
データベース講座1:データベース論理設計

ちょっとニッチに感じるかもしれませんが、SQLのインデックスを学ぶことができる講座です。
よい性能でSQLを運用するためにはインデックスの理解は必要不可欠です。
CRUD書いて満足するエンジニアを出し抜きましょう。
SQLServerのインデックスを理解して検索を速くする方法

気になった人はぜひ見てみてくださいね!

以上、コジマでした。


SQLカテゴリの最新記事