DB勉強会レポート_2019年01月22日(火)実施分

こんにちは。 今回で午後Ⅰは最終回です(意外と長かった)。 もう一息、頑張りましょう! 解説範囲 平成30年度 春期 データベーススペシャリスト試験 午後Ⅰ 問3 設問1 (5) ~ 設問2 (3) 設問1 (5) 設問2 ⚓ 設問1 (5) 作業W6(DML性能予測)について、表6中のク〜コに入れる適切な字句を、表5、6中の下線部分の用語を用いて答えよ。 設問に関する情報を問題文中から探し整理していきましょう。 表2 物理DB設計及び実装の作業工程表(抜粋) 作業順 作業ID 作業名 作業内容 6 W6 DML性能予測 DMLの結果行数および読込みページ数を机上で予測する。 表5 可変長列があるテーブルのストレージ所要量を見積もる計算の手順(完成版) 手順 手順の内容 1 テーブルの見積行数, 平均行長(バイト)及び最大行長(バイト)を得る。 2 RDBMSで指定できるページ長の中から, 最大行長の行を1行以上格納できるページ長を決め, ページ長からヘッダ部を除いた有効ページ長(バイト)を得る。 3 テーブルに行をロードした後, ページあたり1行以上を挿入したい場合, 次の不等式を満たす適切な空き領域率(%)を決める。  平均行長 ≦ 有効ページ長 × 空き容量 ÷ 100 4 次の計算式によって, テーブルのストレージ所要量(バイト)を求める。  ページ当たりの平均行数 = 有効ページ長 ÷ 平均行長の小数点以下を切捨て  必要ページ数 = 見積行数 ÷ ページ当たりの平均行数の小数点以下を切上げ  テーブルのストレージ所要量 = ページ長 × 必要ページ数 表6 テーブルからの読込みページ数を予測する計算の手順(未完成) 手順 手順の内容 1 DMLのアクセスパスを想定, そのアクセスパスを用いてページから読み込む探索行数を予測する。結果行数 = 探索行数とは限らない。 2 ・アクセスパスが表探索の場合:読込みページ数 = ク・アクセスパスが索引探索の場合, かつ,    索引が低クラスタな索引の場合:最大読込みページ数 = ケ … A    索引が高クラスタな索引の場合:        最小読込みページ数 = ケ ÷ コの小数点以下を切上げ … B・アクセスパスが索引探索の場合、読込みページ数はAとBの間の値になる。 下線部分の用語について確認しておきましょう。 用語 意味 単位 探索行数 DMLを基に探す行の総数 行 結果行数 DMLを基に探し、返す行の総数 行 解説 まずは手順1から。 直接問題には関係ありませんが、「結果行数 = 探索行数とは限らない」とあります。 どういうことでしょうか? 例えば、以下のようなつテーブルが存在するとします。 単語 起源 minister ラテン語 country フランス語 tea 中国語 clerk ラテン語 they スカンディナヴィア語 orange アラビア語 fruit フランス語 yacht オランダ語 priest ラテン語 want スカンディナヴィア語 melon ギリシャ語 cigarette スペイン語 hara-kiri 日本語 上記は私の個人ブログから一部を引っ張ってきたもので、英語の語彙の起源を示したものです(完全な個人的趣味ですみません)。 全部で13行あり、テーブル名を「借用語」とします。 SELECT 起源 FROM 借用語のSQLを実行すると、実行結果は以下の通りです。 起源 ラテン語 フランス語 中国語 ラテン語 スカンディナヴィア語 アラビア語 フランス語 オランダ語 ラテン語 スカンディナヴィア語 ギリシャ語 スペイン語 日本語 上記の場合は、結果行数(13行) = 探索行数(13行)が成り立っています。 しかし、SELECT DISTINCT 起源 FROM 借用語を実行すると、DISTINCT句によって重複する行が一つにまとまり、以下の通りの結果になります。 起源 ラテン語 フランス語 中国語 スカンディナヴィア語 アラビア語 オランダ語 ギリシャ語 スペイン語 日本語 この場合、結果行数(9行) ≠ 探索行数(13行)となります。 このように、DISTINCTやJOIN句を使うと、ユーザーに見える返される行数と実際に裏で探索している行数が異なることがあります。 それでは、空欄を含む手順2を見ていきましょう。 … Continue reading DB勉強会レポート_2019年01月22日(火)実施分