复合主键中的属性顺序 - 用于优化查询
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"的概念。我的意思是,您可以深入了解索引结构的结构以确定重复值是否会影响索引大小,但这将是非常、非常、非常边缘的优化。
一般来说,问题是哪些索引最适合查询。因此,如果您更常使用 where
、order by
和 group by
子句中的一个字段,那么这将决定先使用哪个字段。您可能会发现您需要在两列上使用非聚集索引。
注意:聚簇索引对于插入不是特别有效。它们需要在物理上将新记录定位在旧记录附近,因此插入会在先前页面的中间进行(导致页面拆分和部分填充的页面)。这是插入的额外开销,二级索引不需要。 (二级索引也需要更新,但原始数据不需要移动。)
我理论上正在处理 Oracle11g
数据库,并且有一个特定的 table 只有 2 列。其中一列是 person
标识符,另一列是 city
标识符,它们都构成 primary key
。
但是,personID
的值比 cityID
的值多得多。
是 primary key (personID, cityID)
还是 (cityID, personID)
更有效率?
设置主键没有"efficiency"的概念。我的意思是,您可以深入了解索引结构的结构以确定重复值是否会影响索引大小,但这将是非常、非常、非常边缘的优化。
一般来说,问题是哪些索引最适合查询。因此,如果您更常使用 where
、order by
和 group by
子句中的一个字段,那么这将决定先使用哪个字段。您可能会发现您需要在两列上使用非聚集索引。
注意:聚簇索引对于插入不是特别有效。它们需要在物理上将新记录定位在旧记录附近,因此插入会在先前页面的中间进行(导致页面拆分和部分填充的页面)。这是插入的额外开销,二级索引不需要。 (二级索引也需要更新,但原始数据不需要移动。)