看在你的份上,我不会把它全部粘贴在这里,只知道它很长并且涉及很多连接。
我正在处理的最复杂的表结构如下所示:
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 个查询中,导致连接对数据库服务器造成极大的压力。您很可能最好执行多个更简单的查询,然后尝试在 1 个大型查询中完成所有操作。
关于mysql - 我怎样才能改进这个多连接怪物查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8213863/