私は2つの質問について考えてきました。これに関するインターネット上のリソースは見つかりませんでした。dbms はどのように処理しますか? それとも彼らは?特にオラクル。
質問の前に、例を示します。マスター テーブル「MASTER」とスレーブ テーブル「SLAVE」があるとします。マスターテーブルには、主キーである「ID」列があり、インデックスはOracleによって作成されます。スレーブテーブルには、マスターテーブルを参照する外部キー「MASTER_ID」と「SLAVE_NO」があります。これら 2 つの組み合わせがスレーブ テーブルの主キーであり、再びインデックスが作成されます。
**MASTER** | **SLAVE**
(P) ID <------> (P)(F) MASTER_ID
(P) SLAVE_NO
さて、質問です。
1- MASTER_ID が自動インクリメント列であり、レコードが削除されていない場合、テーブルのインデックスが不均衡になりませんか? Oracle は定期的にインデックスを再構築しますか? 私の知る限り、Oracle はビルド時にのみインデックス ブランチのバランスを取ります。Oracle はインデックスを自動的に再構築しますか? レベルがいくつかの高レベルに上がるとしますか?
2-Oracleが自動的に再構築しないと仮定すると、インデックスを定期的に再構築するジョブをスケジュールすることを除いて、SLAVEテーブルの主キー列を逆に注文する方が賢明でしょうか? つまり、「MASTER_ID」、「SLAVE_NO」を「SLAVE_NO」、「MASTER_ID」と並べ替えるのではなく、スレーブ テーブルの B ツリー インデックスをよりバランスの取れたものにするのに役立ちますか? (まあ、各マスターテーブルには正確な数のスレーブレコードがないかもしれませんが、それでも逆順よりは良いようです)
それについて何か知っている人はいますか?それとも意見?