具有单个 varchar 列与多个 varchar 列的复合索引

Composite index with single varchar column vs multiple varchar column

我有一个要创建复合索引的用例。我有两个创建复合索引的选项。

Option 1: STATUS_CODE (varchar(1)) & TICKET_ID (number)

Option 2: STAUS (varchar(50)) & TICKET_ID (number)

对于 STATUS 和 STATUS_CODE 我只有 5 个可能的值。

对于我的复合索引,哪个选项更好?这两个索引之间会有性能差异吗?

如果其他都一样,那么第一个方案更好。每行将由索引中较少的数据表示,这将允许索引在磁盘上占用更少的 space。这样,无论何时使用索引,都可以在单个物理读取操作中从磁盘检索更多数据(来自索引)。不过,这对性能的影响有多大,首先取决于您拥有多少数据,以及 STATUS 值的长度。 (如果它们都接近 50 个字符,那么差异会更大;如果大多数都很短,则差异不大。)

不过,您的 table 设计似乎违反了第三范式。如果 STATUS_CODE 和 STATUS 相互确定,这意味着您应该有一个单独的 table 仅用于“状态”(显示代码和描述)。您的大 table 应该只有 STATUS_CODE 列,而不是 STATUS 列。