我应该如何设计我的表以进行并发表扫描访问?

时间:2011-04-14 00:01:39

标签: oracle database-design

我需要保持多对70,000行并使用减号运算符执行比较差异,例如它们之间的操作。在任何时候都可以进行比较(表扫描)。

我目前有一个这种设计的表:

  • 主键(已排序)
  • 识别集合的外键
  • 用于标识集#1或集#2
  • 的密钥
  • 然后这里的数据我需要减去

数据看起来像这样

| PK | FK | Key   | Data      |
| 1  | 1  | Left  | Some data |
| 1  | 1  | Left  | Diff data |
| 1  | 1  | Right | Some data |

我的查询是:

SELECT data
FROM diffTable
WHERE pk = 1
AND fk = 1
AND key = 'Left'

MINUS

SELECT data
FROM diffTable
WHERE pk = 1
AND fk = 1
AND key = 'Right'

我担心全表扫描会垄断资源,后续插入和减去'会受到影响。

我应该如何设计表格以及为什么?

1 个答案:

答案 0 :(得分:1)

create index PK_FK on diff_table
   (PK, FK, Key);

您在问题中发布的查询将使用此索引运行得非常快。

顺便说一句,PK列本身不是主键。请参阅其他评论。也许你想要:

alter table diff_table
  add constraint PK_FK primary key (PK, FK, Key);

也许选择一个更好的名字......