我需要保持多对70,000行并使用减号运算符执行比较差异,例如它们之间的操作。在任何时候都可以进行比较(表扫描)。
我目前有一个这种设计的表:
数据看起来像这样
| 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'
我担心全表扫描会垄断资源,后续插入和减去'会受到影响。
我应该如何设计表格以及为什么?
答案 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);
也许选择一个更好的名字......