我有以下表结构(简化):
id | structure_id | structure_hash_id
1 1 1
2 1 2
3 1 3
4 2 4
5 2 1
6 3 2
如您所见,所有结构都包含许多结构哈希。我想要获取的是每个结构id的信息,它包含多少结构哈希存在于其他结构中。因此,对于这个例子,它是:
structure_id #1: 2
structure_id #2: 1
structure_id #3: 1
我为此写的查询是:
SELECT contains.structure_id, COUNT(contains.structure_hash_id)
FROM (
SELECT *
FROM structureTable st
WHERE structure_id = 1
) AS contains
INNER JOIN (
SELECT *
FROM structureTable st
WHERE structure_id != 1
) AS notcontains
ON contains.structure_hash_id = notcontains.structure_hash_id
GROUP BY contains.structure_id;
它有效,我是从记忆中写的,我不记得我在删除它之前的写作方式,但你明白了。
但问题是在实际表中我有~500mln记录和一些其他列,因此对于每个structure_id,查询执行时间很长(> 15分钟)。
另外,我手动输入了structure_id,而我想把它们全部放在一边,就像我在这篇文章的顶部给出了一个例子。
我该如何解决这个问题?
答案 0 :(得分:1)