2014-03-03 39 views
0

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

是否有任何mySQL配置参数可以帮助您,或者其他任何方法都不会改变收集数据的逻辑?

+2

http://dev.mysql.com/doc/refman/5.7/en/joins-limits.html由于手册页没有提及配置选项的任何内容,我非常怀疑你可以对此做任何事情,重新编译mysql。另外事实上,限制是61是有点暗示内部它实际上允许64表,但保留3用于内部使用(可能加入反对MySQL。*表为了权限的目的) –

+2

如果你正在做60个连接,你绝对应该分解你的查询更简单的查询。 –

回答

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; 

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