Php 比连接更好的解决方案

Php 比连接更好的解决方案,php,mysql,Php,Mysql,我有一个mySQL查询,在11个表上有一个连接,每个表中大约有50000行,所有表都由一个在所有表中通用的序列号链接 虽然我只希望每个serialnumber有一行,但是mySQL需要很长时间才能运行查询,因为它必须用这么多行连接这么多表 我相信它必须创造大约50000^11的权力 示例:示例查询在语法上可能不正确,但我希望您能理解 select distinct serial, one.data1,two.data2,three.data3 from list left join (sele

我有一个mySQL查询,在11个表上有一个连接,每个表中大约有50000行,所有表都由一个在所有表中通用的序列号链接 虽然我只希望每个serialnumber有一行,但是mySQL需要很长时间才能运行查询,因为它必须用这么多行连接这么多表 我相信它必须创造大约50000^11的权力

示例:示例查询在语法上可能不正确,但我希望您能理解

select distinct serial, one.data1,two.data2,three.data3 from list 
left join (select * from table1)  as one on list.serial=one.serial 
left join (select * from table2)  as two on list.serial=two.serial 
left join (select * from table3)  as three on list.serial=three.serial 
连接更好还是子查询更好? 有没有更好的方法来构建耗时更少的sql查询?
如果是,如何创建?

一个解决方案是创建和维护一个单独的索引表,该索引表由您需要的数据点组成,例如一个.data1、两个.data2、三个.data3。重新索引查询并插入此表中的记录将导致开销,但所有后续查询都可以节省大量开销

我发现另一个有用的解决方案是执行程序连接。当具有简单条件的多表联接需要太多内存时,可能会导致性能大幅下降。例如,您应该尝试使用您在PHP中使用的任何本机编程语言对从简单查询构建的数据集进行手动基准测试。有时,使用这种技术可能会获得优势

包含外键的表

不使用select*,而是使用join table

也许:

SELECT serial, table1.data1,table2.data2,table3.data3 FROM list
LEFT JOIN table1 USING serial
LEFT JOIN table2 USING serial
LEFT JOIN table3 USING serial
GROUP BY list.serial
创建关键点
可能在PHP中单独处理查询和链接数据

所有表的序列列上是否都有索引?所有表中的序列相同,但没有指定为外键,每个表的主键我还必须从一些表中选择多个条目,因此我必须选择*它们并对它们进行分组。您可以共享指向解决方案的链接吗?恐怕我不熟悉数据点和多任务等。基本上,我的想法是创建一个新表,该表的列与所需的查询相同。然后你插入我的索引表col1,col2,…,coln SELECT..在这里插入大查询。。。。现在,您有了一个非规范化的表,可以从中进行快速查询,而无需连接。缺点是必须不时刷新此表,以确保其与实际数据同步。归根结底,这是一种很好的方法,可以修复设计糟糕、查询量大的系统。有道理?