我有一个 mySQL 查询,它连接了 11 个表,每个表中大约有 50000 行,所有这些表都通过所有表中通用的序列号链接
虽然我只想要每个序列号一行,但 mySQL 需要很长时间才能运行查询,因为它必须连接如此多的表和如此多的行
我相信它必须创造大约 50000^11(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 查询?
如果是,怎么办?
最佳答案
一种解决方案是创建并维护一个单独的索引表,其中包含您需要的数据点(例如序列、one.data1、two.data2、三.data3)。重新索引(查询和插入记录)此表会产生开销,但所有后续查询可以节省大量开销。
我发现另一个有用的解决方案是执行编程连接。当具有简单标准的多表连接需要太多内存时,可能会导致性能大幅下降。您应该尝试使用您正在使用的任何 native 编程语言(例如 PHP)对通过简单查询构建的数据集进行手动基准测试。有时您可能会使用此技术获得优势
关于php - 比 join 更好的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28586039/