【发布时间】:2023-03-03 03:21:03
【问题描述】:
我有一个要创建复合索引的用例。创建复合索引有两种选择。
选项 1:STATUS_CODE (varchar(1)) & TICKET_ID (number)
选项 2:STAUS (varchar(50)) & TICKET_ID (number)
对于 STATUS 和 STATUS_CODE,我只有 5 个可能的值。
哪一个更适合我的复合索引?这两个索引之间会有性能差异吗?
【问题讨论】:
-
ticket_id 看起来像某种键 - 它已经有索引了吗?您可能会发现您的复合索引被忽略了,因为 STATUS 不是很有选择性(5 个值)
-
@NevilleKuyt - ticket_id 和 status_code 看起来都像某种键;该表可能是一个“事实”表,其中每张工单都显示有状态。 (它也可能是一个历史表 - 显示“票证”和“状态”历史,还有一个截止日期列。可以使用复合索引,即使 STATUS 不是很有选择性;例如,如果一个查询对于所有处于“暂停”状态的工单 - 仅仅是因为所有数据都已经在复合索引中,所以不需要表扫描。
-
@mathguy 你是对的。 C 或 COMPLETED 中可以有 99% 的值。我将尝试仅检索处于 HOLD 或其他状态的值。
标签: database oracle indexing relational-database