自分用に疑問点や調べたことをまとめたものです。
R3
午後Ⅰ問2
索引はバッファヒット率100%、テーブルはバッファヒット率0%と仮定
索引データ自体は全てバッファ上に存在するので、該当行を含むページのディスク上の位置はすぐに分かる、が、そのページ自体はバッファ上に存在しないためディスクI/Oが発生する、という意味か?
であれば「テーブルはバッファヒット率0%」ではなく「ページはバッファヒット率0%」と書いてほしい…
以下perplexityの回答。わかってきたら要検討。。
「実際には索引から行ID(Heap TID)を見つけた後、その対応するデータページがバッファにないからディスクI/Oが起きる」ので、正確さだけでいえば「データページはバッファヒット率0%」と書いたほうが分かりやすいです。
しかし説明や論文、教科書的な記述ではしばしば「テーブル側のバッファヒット率0%」と大ざっぱに表現されます。理由は:
- 簡潔さ重視:ページ単位で区別すると説明が煩雑になるため、全テーブルデータをひとくくりにして「バッファに無いもの」と扱う。
- コスト推定のモデル化:RDBMSの実際のI/Oコスト推定も「テーブルアクセスのヒット率パラメータ」として粗い値を使うことがある。個々のページではなくテーブル全体で仮定を置く方が計算モデルとして扱いやすい
- 意図した前提条件の強調:ここでの議論は「索引は全部メモリに載っている」と「テーブルはディスクから読む必要がある」というコントラストを説明したいので、細かさより両者の違いを単純に表現している
R4
午後Ⅰ問2
ALTER TABLE文
テーブル名、カラム名、カラム定義の変更や、カラムの追加などを行う文
ALTER TABLE <OldTableName> RENAME TO <NewTableName>;
ALTER TABLE <TableName> RENAME COLUMN <OldColumnName> TO <NewTableName>;
ALTER TABLE <TableName> ADD COLUMN <NewCulumnName> <Type>;
トリガー
BEFOREとAFTERがめちゃくちゃ聞かれる。
COALESCE
引数に与えた最初の非NULL値を返す.
発音は「コアレス」に近いらしい。
意味としては「折れた骨が癒合する」 「合体する」という意味で英単語としては一生使わなそう。
coalesce or unite in a mass
訳)合体するか、一括して結びつく
weblio "coalesce"
離散的な集合というより連続的な結合を指すのかな?
with句
副問い合わせに名前をつけて、一時的にテーブルを作るようなもの。2つ目以降の服問い合わせでは"with"を省略する。
-- ポケモンの基本情報
WITH ポケモン情報 AS (
SELECT ID, 名前, タイプ
FROM ポケモンテーブル
)
-- ポケモンの技
, 技情報 AS (
SELECT ID, 技名
FROM 技テーブル
)
-- JOINして表示
SELECT
ポケモン情報.名前,
ポケモン情報.タイプ,
技情報.技名
FROM
ポケモン情報
JOIN 技情報 ON ポケモン情報.ID = 技情報.ID;
午後Ⅱ 問1
cast
sqlの型変換を行う関数
CAST(式 AS 新しいデータ型)
window関数
別名分析関数。
集計関数がグループに対して単一集計値を返すのに対して、分析関数は行ごとに単一の集計値を返す。
quitaのこちらの記事が詳しくわかりやすかった。
DBドメイン知識
- オーソリ処理
- クレジット決済の際に利用する用語で、カードが正当に利用できるかどうかをクレジットカード会社に確認する作業のこと。信用照会と与信確認を指す
- 信用照会:ローンやカードの利用状況などを確認
- 与信確認:与信枠(利用可能金額)の範囲内か、不正利用でないかを確認
- ”Authorization"の略
- クレジット決済の際に利用する用語で、カードが正当に利用できるかどうかをクレジットカード会社に確認する作業のこと。信用照会と与信確認を指す