【问题标题】:Raising mySQL 61 table join limit提高 mySQL 61 表连接限制
【发布时间】:2023-03-29 08:54:01
【问题描述】:

我有一个 Drupal 6 应用程序需要比 61 表连接 mySQL limit 允许的更多连接。我知道这是一个过多的数字,但它每天只运行一次,结果被缓存以供进一步参考。

是否有任何可以提供帮助的 mySQL 配置参数,或者是否有任何其他方法可以改变收集数据背后的逻辑?

【问题讨论】:

  • dev.mysql.com/doc/refman/5.7/en/joins-limits.html 因为手册页没有提到任何关于配置选项的内容,我非常怀疑你可以做任何事情,除了重新编译 mysql。加上限制为 61 的事实有点暗示它在内部实际上允许 64 个表,但保留 3 个供内部使用(可能出于权限目的加入 mysql.* 表)
  • 如果您进行 60 次连接,您绝对应该将您的查询分解为更简单的查询。

标签: mysql drupal views limit my.cnf


【解决方案1】:

我的方法是将庞大的查询拆分为更小、更简单的查询,并使用临时表来存储中间步骤。我经常使用这种方法,它对我有很大帮助(有时创建一些临时表比在一个大查询中连接所有表更快)。

类似这样的:

drop table if exists temp_step01;
create temporary table temp_step01
    select t1.*, t2.someField
    from table1 as t1 inner join table2 as t2 on t1.id = t2.table1_id;
-- Add the appropriate indexes to optimize the subsequent queries
alter table temp_step01
    add index idx_1 (field1);
-- Create all the temp tables that you need, and finally show the results
select sXX.*
from temp_stepXX as sXX;

记住:临时表只对创建它们的连接可见。如果您需要使结果对其他连接可见,则需要创建一个“真实”表(当然,这仅在过程的最后一步才值得)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2011-07-04
    • 1970-01-01
    • 2014-11-26
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多