需要更快的PHP/MySQL搜索算法进行高度复杂的计算

需要更快的PHP/MySQL搜索算法进行高度复杂的计算,php,mysql,sql,regex,algorithm,Php,Mysql,Sql,Regex,Algorithm,我现在正试图解决一个进退两难的问题。我有一个名为“generic_pricing”的表,它有超过一百万行。看起来像这样 我有一个25000个零件的清单,我需要获得通用的定价数据。有些零件有CLEI,有些零件有零件号,有些零件两者都有。对于25000个零件中的每一个,我都需要搜索generic_pricing表,以查找与clei或partNumber匹配的所有行 更困难的是,我必须根据子字符串搜索进行匹配。例如,我的一个部件可能有一个CLEI为“IDX100AB01”,但我需要一个查询的结果,如

我现在正试图解决一个进退两难的问题。我有一个名为“generic_pricing”的表,它有超过一百万行。看起来像这样

我有一个25000个零件的清单,我需要获得通用的定价数据。有些零件有CLEI,有些零件有零件号,有些零件两者都有。对于25000个零件中的每一个,我都需要搜索generic_pricing表,以查找与clei或partNumber匹配的所有行

更困难的是,我必须根据子字符串搜索进行匹配。例如,我的一个部件可能有一个CLEI为“IDX100AB01”,但我需要一个查询的结果,如

SELECT * FROM generic_pricing WHERE clei LIKE 'IDX100AB%';
目前,我查找这些匹配项的冗长PHP代码使用以下逻辑循环25000项。对于每个项目,我使用上面对clei的查询。如果找到,我将使用该行进行计算。如果没有,我将对partNumber执行类似的查询,以尝试查找匹配项

你可以想象,这非常耗时。为了运行所有计算,必须对其他10个类似于通用定价的表格进行此操作。该系统现在陷入困境,试图处理所有这些数据时超时。所以现在我正试图找到一个更好的方法

我的一个想法是只需查询数据库一次即可获得所有行,然后使用循环查找匹配项。但对于25000个项目,每个项目都必须与超过一百万行进行比较,这似乎需要更长的时间

我的另一个想法是获得所有通用定价数据的两个关联数组。i、 e.一个由clei索引的所有行组成的数组,另一个由partNumber索引的所有行组成的数组。但是,因为我正在寻找子字符串,所以这不起作用

我在这里找不到有效的方法来处理这项任务。为了简化这个过程,我忽略了什么吗

不要在数据库中查询所有行并在应用程序中对它们进行排序。会引起更多的头痛。 以下是一些建议:

  • 使用参数化查询。这允许db引擎编译查询一次并多次使用它。否则,每次都必须优化和编译查询
  • 找出一种使
    中的
    工作的方法。不要使用like,请尝试
    。。。左(clei,8)英寸('IDX100AB'、'IDX100AC'、'IDX101AB'…)
  • 在db端进行计算/数学运算。构建一个存储过程,该过程获取零件/clei编号列表,并输出具有计算价格的相同列表。您将拥有更多的执行控制权和更少的网络开销。如果不是存储过程,则生成一个视图
  • 分页。如果该数据显示在某个地方,则切换到批量处理100或更少
  • 建立一个备忘单。如果速度是一个问题,试着每晚将价格预先计算到一个单独的表中,如果需要,包括一些部分clei/零件号。然后使用预计算的查找表

  • 重组表格是否可行?因为它看起来好像你从来没有建立过正确的引用来有效地查询你正在查找的数据,我真的不知道这是否会更好,但是你可能可以做一些事情,比如使用全文索引,然后做一个搜索,以查找以特定字符串开头的单词。我添加了一些额外的索引,它大大加快了这一进程。