我正在尝试构建一个查询,以便稍后将其插入我正在构建的表中。我希望查询返回 4 列,它们是来自彼此相关的不同实体的 4 个 id。我有一张包含关系的表格,但有 varchars,还有四个表格,我已经在其中放置了不同的事件,每个表格都有一个 ID:
TABLE RELATIONS:
A B C D
Sony Bravia 32" 1200€
JVC Whatever 15cm 200€
Samsung Galaxy 13" 500€
TABLE A:
id name
1 Sony
2 JVC
3 Samsung
TABLE B:
id name
1 Whatever
2 Galaxy
3 Bravia
TABLE C:
id name
1 13"
2 15cm
3 32"
TABLE D:
id name
1 200€
2 1200€
3 500€
现在,我想通过查询得到的是:
QUERY RESULT:
A B C D
1 3 3 2
2 1 2 1
3 2 1 3
首先,我构建了这个:
SELECT DISTINCT A.id as A, B.id as B, C.id as C, D.id as D
FROM relations
INNER JOIN A ON A.name = relations.A
INNER JOIN B ON B.name = relations.B
INNER JOIN C ON C.name = relations.C
INNER JOIN D ON D.name = relations.D
这似乎是正确的,但它需要很长时间(可能是几个小时)才能完成。4 个实体的表大小为 (80,65000,1900,15),关系表的大小为 65000。
如果我只执行其中一个连接需要 15 毫秒,如果我执行其中两个连接需要 6-7 秒,并且 3 o 4 时间会呈指数增长。我想也许 JOIN 解决方案对我的情况来说可能是矫枉过正,因为我只需要“翻译”字符串......
我已经为四个实体表中的每个“名称”字段创建了一个索引,并为关系.a、.b、.c、.d 创建了一个索引。
奇怪的是,如果我所做的是复制关系表中的 a、b、c、d 列并执行 4 个 UPDATE 查询将 id 插入重复字段,匹配它的“父”,那么几乎不需要任何东西......但我是肯定有更好的方法来做到这一点......有人有想法吗?