为了你的缘故,我不会把它全部粘贴在这里,只要知道它的海拉长,并涉及大量的连接。如何改善这种多重加入怪物查询?
表结构我的工作,在其最复杂的,看起来是这样的:
tables = Co, Cn, O, A, N;
scheme (simplified):
N(n)-> (1)every other table
A(n)-> (1)(every other table except N
O(n)-> (1)Co, Cn
Cn(n) -> (1)Co
Co(1) -> (1)cn
查询的最费力的部分进入低谷这样的结构(我想要获取信息从表否也从其他的):
N join A join O join ((Co join Cn) union (Cn join Co))
我需要从N个获取的内容,但我还需要从东西合作和Cn但我必须走线槽A型和O得到它们。现在,这可能不是一个巨大的查询,但是N也可以与其他表中的每一个相关,我需要将它们全部取出;让我们只是说,如果我在应用程序中回应它,我无法看到查询中的内容。我分别加入每个案例(N-> A,N-> O,N-> Cn等),然后用UNION抓取它们。现在,N中有将近200,000行,在每个其他表中,将近一千个数据库服务器和网站只是在我尝试运行查询时挂起。
我想到的一个解决方案是放弃外键并为链接创建一个字段,例如从N到所有其他字符:“A_IdA,O_IdO,Co_IdCo,Cn_IdCn”,并在php中处理它;但我宁愿在桌面设计如此激烈的变化之前尝试其他的东西。
这些表格之间的确切关系是什么?例如,在'N'和'A'之间,它是'1:1','1:n'还是'n:1'? –
实际的select语句会使事情变得更清晰。当然,6个连接的select语句不能**那么长。 – Johan
我会尽量澄清一下情况。 – Bogdan