DP-900:Microsoft Azure Data Fundamentals Azure のリレーショナルデータ 問9
Azure のリレーショナルデータ/リレーショナルの概念顧客テーブルは数百万行あり、メールアドレス列を条件にした検索処理(WHERE句での一致検索)が1日に何度も実行されているが、該当する行を探すのに毎回テーブル全体を読み込んでしまい応答が遅い。テーブルの行データや列の値は変更せずに、この検索処理を高速化したい場合に作成すべきものはどれか。
当サイトのオリジナル問題(DP-900:Microsoft Azure Data Fundamentalsの出題範囲「Azure のリレーショナルデータ」に対応。実際の試験問題ではありません)
- Aメールアドレス列を参照するビュー
- Bメールアドレス列に対するインデックス
- Cメールアドレス列の値を検証するCHECK制約
- D検索結果をパラメーターで受け取るストアドプロシージャ
正解:B
解説
インデックスは、指定した列の値と対応する行の位置を別の構造で保持しておくことで、検索時にテーブル全体をスキャンせずに該当する行を効率よく見つけられるようにする仕組みです。メールアドレス列にインデックスを作成すれば、行データや列の値を一切変更せずに、一致検索の応答を高速化できます。ビューは検索結果を仮想的な表として参照する仕組みにすぎず、背後の検索処理自体は変わりません。CHECK制約はデータの検証、ストアドプロシージャは処理の一元化のための仕組みであり、いずれも全表スキャンの解消には直接つながりません。
選択肢ごとの解説
- A誤り。ビューはSELECT文を名前付きで保存して仮想的な表として参照できるようにする仕組みにすぎず、背後の検索処理が全表スキャンのままであれば実行速度自体は改善しません。
- B正しい。インデックスは指定した列の値をもとに該当行を効率よく探し出せるように別の構造でデータを保持する仕組みであり、メールアドレス列にインデックスを作成すれば、行データや列の値を変更せずに一致検索を高速化できます。
- C誤り。CHECK制約は列に入力される値が条件を満たしているかを検証する仕組みであり、既存データの検索処理を高速化する機能は持ちません。
- D誤り。ストアドプロシージャは一連のSQL処理をまとめて保存し呼び出せる仕組みですが、その内部の検索処理に適切なインデックスがなければ全表スキャンは解消されず、高速化にはなりません。