我有一个复合主键,它是 Column1 和 Column2 的组合。如果我有 Column2 和 Column1 的复合键,会有什么不同。你设置列的顺序真的很重要吗?
小智 10
确实如此,但可能不是您所期望的方式。
鉴于 col1 和 col2,人们最初的直觉是将更具选择性的列放在首位。
但是,这几乎总是无关紧要的。
首先,您需要考虑如何在 SQL 语句中使用索引。如果某些 SQL 仅指定 col1,则 col1 可能应该是第一个。如果所有 SQL总是在 where 谓词中指定两列,那么哪个列在前并不重要。
但是,如果大多数 SQL 都指定 col1 和 col2,而少数只提供 col1 或 col2 呢?
那么,在这种情况下,选择性最低的列应该(可能)先行。有两个原因。首先,如果选择最少的先行,那么对于那些在谓词中仅指定第二列的查询,如果前导列不是很有选择性,Oracle 将更有可能执行 INDEX SKIP SCAN。其次,通过将选择性较低的列放在首位,您将更有可能利用索引压缩。
希望有帮助。