目標
「DBMSの仕組み」について概要を理解する
「効率的なデータアクセス機構」について概要を理解する
DBMSの仕組み
DBMSの機能
データベースマネジメントシステムには次のような主な機能がありました。
①「データベース言語の提供」
データベースの定義・操作・制御などを行う言語を利用できる
②「効率的なデータアクセス機構」(この記事で扱います)
データの効率的な格納方法の提供・インデックス設定による検索処理の効率化・問い合わせ最適化機能の提供
③「保全機能(整合性の維持)」
データの整合性を保証するための機能
④「機密保護」
ユーザーへのアクセス権限の付与を提供し不正アクセスを防止する機能
⑤「排他制御(同時実行の制御)」
複数の処理を同時に行ったときに矛盾が起きないようにする機能
⑥「障害復旧」
システムの障害やトラブルに対してデータベースを復旧する機能
これらの機能を少しずつ見ていきたいと思います。
(データベース言語の提供については実際の操作で確認)
効率的なデータアクセス機構の概要
問い合わせ最適化機能の提供
問い合わせに対する処理のフロー:データベースに対してユーザーから問い合わせ(SQLの入力など)があるとDBMSでは次のような流れで処理が行われていきます。

まず、ユーザーからSQL文が入力されるとその問い合わせに対して構文解析が行われます。

続けて、構文解析木は最適化器に渡されて処理木を利用して最適化された実行プランを出力します。

その後、コード生成器では出力された実行プランに基づいた実行コードが生成されます。

最後にエグゼキューターによって実行コードが実行され結果リレーションをユーザー側に出力します。

問い合わせに対する最適化は上のような処理フローで行われています。
データの効率的な格納方法の提供(内部スキーマ)
RDBMSでは実際にデータが格納される場所をファイルと呼びます。このファイルは「ページ」と「エクステント」で管理されています。
データの格納方式
ファイルに対してはデータの格納方法に次のようなルールを指定することができます。
- 順序なしの格納…レコードの追加順で格納されます。
- 順序ありの格納…レコードが主キーを基に昇順降順で並びかえて格納されます。
- ハッシュによる格納…ハッシュ関数を利用してレコードが格納されます。
インデックス設定による検索処理の効率化(内部スキーマ)
データの格納場所の検索方式
データへのアクセス方法(検索方法)には次のようなものがあります。
- 探索法…順序ありの格納の場合に検索する値とデータの中央の値の比較を繰り返しながら格納場所を特定する。(二分探索)
- スキャン法…順序なしの格納の場合に全件を格納された順番で参照して格納場所を特定する。(線形探索)
- ハッシュ法…ハッシュ関数を利用して格納場所を特定する。
- インデックス法…「非平衡木のISAMインデックス」と「平衡木のB木、B+木」などがあります。インデックス法ではインデックスファイルを作成して検索を行います。
【インデックスでの検索の具体例】
例えば下のような書籍テーブルがあった場合、主キーでは検索を高速に行うことができます(主キーはインデックスがかかっている)が、タイトルで検索を行おうとした場合は並び順がバラバラなため検索を高速に行えません。
主キー | タイトル | 出版社 | 発売日 |
001 | さんびきのこぶた | 出版社NNG | 20170501 |
002 | ももたろう | 出版社BFG | 20211214 |
003 | あかずきんちゃん | 出版社ERK | 20180722 |
…. | |||
9999 | いっすんぼうし | 出版社ZER | 20150930 |
これに対してインデックスファイルを作成すると次のようになります。インデックスファイルはインデックスに指定したカラムを昇順に並び替えたカラム(この場合はタイトル順)とそのデータが存在している元のリレーションにあるタプルの位置を示すポインタ(住所)で構成されます。
タイトル | ポインタ |
あかずきんちゃん | 000004744 |
いっきゅうさん | 000073843 |
いっすんぼうし | 000092973 |
うらしまたろう | 000072837 |
… | … |
ももたろう | 000004738 |
… | … |
わらしべちょうじゃ | 000008443 |
インデックスファイルを利用して検索を行うと、検索時には並び替えられたタイトルで検索をし、探し当てたらポインタを利用して書籍テーブルからタプルを抽出するといった動きになります。

今回は以上になります。

ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

