mysql - 我怎样才能改进这个多连接怪物查询?

标签 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 个查询中,导致连接对数据库服务器造成极大的压力。您很可能最好执行多个更简单的查询,然后尝试在 1 个大型查询中完成所有操作。

关于mysql - 我怎样才能改进这个多连接怪物查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8213863/

相关文章:

php - 复杂对象上的 mysql_fetch_object

php - 变量未传递给 sql 查询

mysql - 在 MySQL 的另一个列表中搜索列表中的任何元素

php - 在数据库中输入主键时出错

php - 根据现有 ID 添加值

mysql - 我如何使用 MYSQL 获取每个月正在进行的项目计数?

mysql - SQL 中的 IF/WHEN 语句

php - 多个账户的捐款总和(变量)

php - 如何使用 MySQL 查询在表中查找最后插入的 varchar 值

mysql - In '' mysql'' pid 文件的管理器在没有更新文件的情况下退出