复合主键中的属性顺序 - 用于优化查询

Order of attributes in composite Primary Key - for optimizing queries

我理论上正在处理 Oracle11g 数据库,并且有一个特定的 table 只有 2 列。其中一列是 person 标识符,另一列是 city 标识符,它们都构成 primary key
但是,personID 的值比 cityID 的值多得多。

primary key (personID, cityID) 还是 (cityID, personID) 更有效率?

设置主键没有"efficiency"的概念。我的意思是,您可以深入了解索引结构的结构以确定重复值是否会影响索引大小,但这将是非常、非常、非常边缘的优化。

一般来说,问题是哪些索引最适合查询。因此,如果您更常使用 whereorder bygroup by 子句中的一个字段,那么这将决定先使用哪个字段。您可能会发现您需要在两列上使用非聚集索引。

注意:聚簇索引对于插入不是特别有效。它们需要在物理上将新记录定位在旧记录附近,因此插入会在先前页面的中间进行(导致页面拆分和部分填充的页面)。这是插入的额外开销,二级索引不需要。 (二级索引也需要更新,但原始数据不需要移动。)