我得到了一个带有 2 个表的 Mysql Innodb。一个是 117+ 百万行,有超过 340 列,包括姓名、地址、城市、州和邮政编码。第二个表是 17+ 百万行,其中包含姓名、地址、城市、州和邮政编码以及电子邮件。第一个和第二个表中的数据不会被添加或更新。每个表中的 id 都有一个主键。没有定义其他索引。
我首先从 117+ 百万行表中创建了一个联系人表,其中只有名称、地址、城市、州和邮编,使其显着变小。我编写了一个 php 脚本来使用包含 17+ 百万条记录的较小表中的每一行执行搜索,试图在联系人表中找到匹配项。当找到一个时,我将 id 和 email 插入到一个单独的表中。我取消了它,因为每次搜索大约需要 86 秒。拥有 17+ 百万条记录将需要很长时间才能完成。
这是我的搜索查询:
q= "从 GB_contacts 中选择 id WHERE LAST_NAME=\"$LAST\" 和 FIRST_NAME=\"$FIRST\" 和 MI=\"$MIDDLE\" 和 ADDRESS=\"$ADDRESS\" 和 ZIP=\"$ZIP\""。
我的问题是我怎样才能更快地做到这一点?我应该对联系人表中的姓名、地址和邮编进行索引,还是应该索引联系人表中的每一列?有没有更快的方法通过mysql做到这一点?我已经阅读了一大堆不同的资源,但不确定哪个是最好的方法。由于这些桌子很大,我尝试做的任何事情都需要很长时间,所以我希望得到一些专家的建议,避免浪费几天、几周和几个月的时间来解决这个问题。感谢您提供任何有用的建议!