我有一个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,Three.data3)。对表重新索引(查询和记录插入)将导致开销,但是所有后续查询都可以节省很多开销。
我发现有用的另一个解决方案是执行程序化联接。当具有简单条件的多表联接需要太多内存时,可能会导致性能大幅下降。您应该尝试使用您正在使用的任何本机编程语言来手动基准测试从易于查询构建的数据集的基准,例如使用PHP。有时您可能会使用此技术获得优势
关于php - 比加入更好的解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28586039/