令和2年 午後2 問1 設問1 (1)

索引さん  
(No.1)
解答は
(世帯区分、地域コード)
となっています。

(世帯区分)のみで良いのではないのでしょうか。

理由:
比較対象住居が、
同じ地域の場合  ⇒  住居.地域コード=~~  ⇒  すでに存在する(地域コード)の索引を使用
同じ世帯区分の場合  ⇒  住居.世帯区分=~~  ⇒  (世帯区分)の索引を使用
同じ地域かつ同じ世帯区分の場合  ⇒  住居.地域コード=~~ AND 住居.世帯区分=~~
  ⇒  地域コードについては(地域コード)索引、世帯区分については(世帯区分)索引を使用

いずれの場合も、(地域コード)と(世帯区分)の2つの索引があれば、
「等値比較の述語の対象列が、索引キーの全体に一致している」ため、索引探索が使用されると思います。

以上です。      
2021.09.19 17:18
索引さん  
(No.2)
この投稿は投稿者により削除されました。(2021.09.19 20:50)
2021.09.19 20:50
索引さん  
(No.3)
自己解決しました。
以下自分の覚書で残します。

・忘れていたこと
基本、1SQLで使われるのは、1index
(ただし、mysqlにはインデックスマージといって、1SQL内で複数の索引を使える機能があるらしい。が、デスペでは無視してよい?)
・気づいていなかったこと
設問に、比較対象住居を索引内で絞り込むようにしたい。と書かれている。

■結論
where句のパターンは以下。
①地域コード=~~
②世帯区分=~~
③地域コード=~~ AND 世帯区分=~~  ※順不同

indexのパターンは以下。
1.(地域コード)、(世帯区分)
2.(地域コード)、(地域コード、世帯区分)
3.(地域コード)、(世帯区分、地域コード)

1.(地域コード)、(世帯区分)の場合
①地域コード=~~
  (地域コード)より、OK
②世帯区分=~~
  (世帯区分)より、OK
③地域コード=~~ AND 世帯区分=~~  ※順不同
  (地域コード)を使うと、世帯区分が索引内で絞れない。(該当する地域コードを持つ行はヒットするが、その世帯区分が今回指定する世帯区分かは索引内ではわからない。)
  (世帯区分)を使うと、地域コードが索引内で絞れない。(該当する世帯区分を持つ行はヒットするが、その地域コードが今回指定する地域コードかは索引内ではわからない。)

2.(地域コード)、(地域コード、世帯区分)の場合
①地域コード=~~
  (地域コード)より、OK
②世帯区分=~~
  (地域コード、世帯区分)⇒複合インデックスの、第二カラム指定のため、索引は使われない。NG
③地域コード=~~ AND 世帯区分=~~  ※順不同
  (地域コード、世帯区分)より、OK

3.(地域コード)、(世帯区分、地域コード)
①地域コード=~~
  (地域コード)より、OK
②世帯区分=~~
  (世帯区分、地域コード)⇒複合インデックスの、第一カラム指定のため、索引が使われる。指定するのは世帯区分のみのため、ここまでの絞り込みでOK
③地域コード=~~ AND 世帯区分=~~  ※順不同
  (世帯区分、地域コード)よりOK


以上より、追加する索引は(世帯区分、地域コード)


※ただし、もし設問で「比較対象住居を索引内で絞り込むようにしたい。」と書かれていなかったら
(地域コード)、(世帯区分)でもよかった?単品の検索はもちろん、ANDでやっても、片方は索引に引っかかるので、索引探索は満たしている。。。?

(この結論に辿り着くのに、6,7時間もかかってしまった。。多分二度と間違えないような気がする。)
2021.09.19 20:51
おのでらさんさん 
(No.4)
同じ問題を解いていて、同じ状況に陥りました。
とっても、役に立ちました。
ありがとう
2021.09.19 22:12

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop