2015-12-09 74 views
0

我理論上正在研究Oracle11g DB,並有一個只有2列的特定表。其中一列是person標識符,其他列是city標識符,它們都構成primary key
但是,personID的值可能會比cityID更多。

製作primary key (personID, cityID)(cityID, personID)效率更高嗎?複合主鍵中屬性的順序 - 用於優化查詢

+0

您可以隨時對其進行基準測試。以下是您可能感興趣的主題:[索引中的列順序](https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:5671539468597)。 – sstan

回答

2

在設置主鍵時沒有「效率」的概念。我的意思是,您可以深入索引結構的結構來確定值的重複是否會影響索引大小,但這將是一個非常非常非常邊際的優化。

一般來說,問題是哪些索引最適合查詢。因此,如果您更常使用where,order bygroup by子句的其中一個字段,那麼這將決定哪一個先行。您可能會發現在兩列上都需要非聚集索引。

作爲說明:聚簇索引對於插入不是特別有效。他們要求在舊記錄附近物理定位新記錄,因此插入會放在前一頁的中間(導致頁面拆分和部分填充頁面)。這是插入的額外開銷,二級索引不需要。 (二級索引也需要更新,但原始數據不需要左右移動。)

+0

如果城市的人的獨特價值低於人,那麼如果你先將城市放在首位並使用壓縮選項,那麼你的指數的大小就會小一些。有時顯着減少。但是它可能會影響從所有城市選擇特定人員的查詢的負面表現。 – Rusty

+0

@Rusty。 。 。我完全同意。我希望答案能傳達這樣的想法:索引的執行是基於正在運行的查詢,而不是索引的神祕屬性。 –

+0

@戈登,是的。我不想說任何反對。完全支持你的答案。只需添加另一個觀點 - 空間,而不僅僅是表現。 – Rusty