0

我正在尝试构建一个查询,以便稍后将其插入我正在构建的表中。我希望查询返回 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 插入重复字段,匹配它的“父”,那么几乎不需要任何东西......但我是肯定有更好的方法来做到这一点......有人有想法吗?

非常感谢! 解释结果 http://www.redlanemedia.com/explain.png

4

0 回答 0