我正在尝试构建一个查询,以便以后将其插入到我正在构建的表中。我希望查询返回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个4,则时间会呈指数增长。我想JOIN解决方案可能对我的情况来说太过分了,因为我只需要“翻译”字符串......
我已经为四个实体表中的每个“name”字段创建了一个索引,以及relationship.a,.b,.c,.d的索引。
奇怪的是,如果我所做的是复制关系表中的a,b,c,d列并执行4次UPDATE查询,将id插入复制字段,匹配其“父”,则几乎不需要任何内容......但是我相信有更好的方法可以做到这一点......任何人都有想法吗?
非常感谢! EXPLAIN result http://www.redlanemedia.com/explain.png