我现在正试图解决的困境。我有一个名为" generic_pricing"有超过一百万行。它看起来像这样......
我有一个25000个零件的清单,我需要获取generic_pricing数据。有些部分有CLEI,有些有partNumber,有些有两部分。对于25000个部分中的每个部分,我需要搜索generic_pricing表以查找与clei或partNumber匹配的所有行。
让事情变得更加困难的是我必须根据子字符串搜索进行匹配。例如,我的一个零件的CLEI为" IDX100AB01",但我需要查询的结果,如....
SELECT * FROM generic_pricing WHERE clei LIKE 'IDX100AB%';
目前,我用于查找这些匹配的冗长PHP代码使用以下逻辑来循环遍历25000个项目。对于每个项目,我在clei上使用上面的查询。如果找到,我会使用该行进行计算。如果没有,我在partNumber上执行类似的查询以尝试查找匹配。
您可以想象,这非常耗时。这必须在大约10个类似于generic_pricing的其他表中完成,以运行所有计算。该系统现在正在陷入困境并暂时试图破坏所有这些数据。所以现在我想找到一个更好的方法。
我有一个想法是只查询数据库一次以获取所有行,然后使用循环来查找匹配项。但是对于25000个项目,每个项目必须与超过一百万行进行比较,这似乎需要更长时间。
我的另一个想法是获得所有generic_pricing数据的2个关联数组。即由clei索引的所有行的一个数组,另一个由partNumber索引。但是因为我在寻找子串,所以它不会起作用。
我在这里找不到有效的方法来处理这项任务。有什么我可以忽略的简化这个吗?
答案 0 :(得分:0)
不查询所有行的数据库并在应用中对它们进行排序。会引起更多的麻烦。 以下是一些建议:
in
工作的方法。而不是像try ... left(clei,8) in ('IDX100AB','IDX100AC','IDX101AB'...)