我目前有3张桌子,
sequences
(成千上万条记录),pim
(数百条记录)和rl
(数百条记录)这些表是系统中最热的部分,获得最多的使用和速度很重要。 pim&rl是序列表链接到的测试的名称。
系统要求我将test_class(pim,rl)存储在这些测试表中的某个位置。要将序列连接到测试表,我看到两个选项:
将test_class列添加到序列表,并将test_class和test_id列添加到对应的测试表(即,序列中的test_class的值为“ pim”,然后在pim测试表中的test_class的值为“ pim” ”),然后使用test_class和test_id或
创建第四个表test_index,该表仅具有一个test_id标识列和test_class列。限制每个测试表只使用test_id,其中测试类对应于该表。在序列和pim&rl表中添加一个test_id列。内部连接到test_index的序列,然后左连接到pim,左连接到rl,以获取该序列的所有测试。
两个选项似乎都很混乱。我倾向于选项(b),因为-在整数上连接AFAIK总是比在字符串上连接快,并且由于这是系统的重要组成部分,因此我需要提高性能。有谁看到解决这个问题的更好方法?
选项(1):
序列
sequence_test_id int PK
sequence_id int
test_id int
test_class str (vals: pim, rl)
pim
test_id int PK
test_class str (vals: pim)
...test params ...
rl
test_id int PK
test_class (vals: rl)
...test params ...
->左连接序列到test_id和test_class上的每个测试表
选项(2)
序列
sequence_test_id int PK
sequence_id int
test_id int
test_index
test_id int PK
test_class str (vals:pim, rl)
pim
test_id int PK FK >- test_index.test_id
...test params ...
rl
test_id int PK FK >- test_index.test_id
...test params ...
->限制pim表仅使用带有test_class ='pim'的test_index中的test_id
->左连接序列到test_id上的test_index,然后左连接到test_id上的每个测试表