如何改进这个多连接怪物查询?

时间:2011-11-21 15:05:15

标签: mysql

为了你的缘故,我不会把它全部粘贴在这里,只要知道它很长并且涉及很多连接。

我正在研究的表结构,最复杂的,如下所示:

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中获取信息,但也从其他表中获取信息):

N join A join O join ((Co join Cn) union (Cn join Co ))

我需要从N获取内容,但我也需要来自Co和Cn的东西,但我必须通过A和O来获取它们。现在,这可能看起来不是一个巨大的查询,但N也可以与其他每一个表相关,我需要得到它们全部;我只是说如果我在应用程序中回显它,我就看不到查询中的内容。我分别加入每个案例(N-> A,N-> O,N-> Cn等),然后用UNION抓住它们

目前,当我尝试运行查询时,N中有近200,000行,其他每个表中有几百到几千,数据库服务器和网站就会挂起。

我想到的一个解决方案是抛弃外键并为链接创建一个字段,例如来自N的所有其他字符:“A_IdA,O_IdO,Co_IdCo,Cn_IdCn”,并在php中处理它;但在桌面设计发生如此剧烈的变化之前,我宁愿尝试别的东西。

1 个答案:

答案 0 :(得分:0)

我很难抓住你确切的表结构和查询。

但是,我觉得你在尝试将过多的内容组合到一个查询中,导致加入对数据库服务器造成极大的压力。你最有可能更好地执行多个更简单的查询,然后尝试在一个巨大的查询中完成所有操作。