2017-04-15 62 views
0

如果表A具有fk1和fk2,並且該表通常與fk1和fk2結合在一起,但很少同時出現。假設fk1 + fk2是唯一的。中間表是否應該聚集在一起,如果是的話,怎麼樣?

該表應該有一個索引fk1_and_fk2,並且該表應該聚集在該索引上嗎?

或者該表應該在fk1上有一個索引,在fk2上有另一個索引並聚集在其中一個上?

回答

1

如果我們只考慮查詢,那麼您應該有一個自動遞增的主鍵,並將(fk1, fk2)(fk2, fk1)定義爲唯一。這假設這些列從不是NULL。或者,你可以用另一種方式來定義它。 (如果它們不是unique,則可以只定義一個索引。)

這將加快這兩種類型的查詢。另外,僅使用這些列的查詢可以直接使用索引,而不必參考原始數據頁面。

通過自動遞增/標識/生成始終/串行主聚簇鍵,插入速度更快,因爲它們始終位於表的末尾。 (當然,你可以在索引的頁面中間插入插頁。)

缺點?

  • 由於需要更新多個索引,因此插入(以及更新和刪除)會稍慢一點。
  • 這需要比原始表格多得多的空間。

一個類似的選擇是將其中一個對作爲主(聚集)索引。這個缺點是頁面在新插入時溢出。

相關問題