小编Shi*_*zou的帖子

item_type_1、item_type_2、... 上的复合索引(item、item_type)还是单列索引更好?

我们需要根据某些业务逻辑来存储和查询三种类型的项目。

\n\n
create table a_table\n(\n   item_a   varchar2(30),\n   item_b   varchar2(16),\n   item_c   varchar2(2),\n   -- other columns\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

和索引

\n\n
create unique index idx_1 on a_table (item_a);\ncreate unique index idx_2 on a_table (item_b);\ncreate unique index idx_3 on a_table (item_c);\n
Run Code Online (Sandbox Code Playgroud)\n\n

特定类型的特定项目的数据将简单地读取为:

\n\n
-- reading item_a\nselect ... from a_table where item_a = \'...\';\n\n-- reading item_b\nselect ... from a_table where item_b = \'...\';\n\n-- ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果某项的类型为a,则它不能为b类型,因此每一行必须只有其中之一item_aitem_b或者item_c具有值,其他必须为 null。(这可以以任何方式强制执行,是否影响离子并不重要insert。)

\n\n

理论上,物品类型的数量可能会增加(也许将来可能会添加第四种物品类型)。

\n\n

这一事实推动了另一种解决方案,该解决方案也避免了丑陋的互斥(在给定示例中未检查)列:

\n\n
create …
Run Code Online (Sandbox Code Playgroud)

index oracle database-design

5
推荐指数
1
解决办法
6258
查看次数

标签 统计

database-design ×1

index ×1

oracle ×1