0
如果表A具有fk1和fk2,並且該表通常與fk1和fk2結合在一起,但很少同時出現。假設fk1 + fk2是唯一的。中間表是否應該聚集在一起,如果是的話,怎麼樣?
該表應該有一個索引fk1_and_fk2,並且該表應該聚集在該索引上嗎?
或者該表應該在fk1上有一個索引,在fk2上有另一個索引並聚集在其中一個上?
如果表A具有fk1和fk2,並且該表通常與fk1和fk2結合在一起,但很少同時出現。假設fk1 + fk2是唯一的。中間表是否應該聚集在一起,如果是的話,怎麼樣?
該表應該有一個索引fk1_and_fk2,並且該表應該聚集在該索引上嗎?
或者該表應該在fk1上有一個索引,在fk2上有另一個索引並聚集在其中一個上?
如果我們只考慮查詢,那麼您應該有一個自動遞增的主鍵,並將(fk1, fk2)
和(fk2, fk1)
定義爲唯一。這假設這些列從不是NULL
。或者,你可以用另一種方式來定義它。 (如果它們不是unique
,則可以只定義一個索引。)
這將加快這兩種類型的查詢。另外,僅使用這些列的查詢可以直接使用索引,而不必參考原始數據頁面。
通過自動遞增/標識/生成始終/串行主聚簇鍵,插入速度更快,因爲它們始終位於表的末尾。 (當然,你可以在索引的頁面中間插入插頁。)
缺點?
一個類似的選擇是將其中一個對作爲主(聚集)索引。這個缺點是頁面在新插入時溢出。