我有一个系统,它将从数据库中返回所有用户,并按与参考邮政编码的最短距离对结果进行排序。
例如:用户将来到网站,输入邮政编码,它将返回所有其他离他的邮政编码最近的用户(升序)
我现在怎么做,为什么会出现问题?
该系统包含超过 3000 万用户及其邮政编码。我正在检索特定州和城市的所有用户(将数据集缩小到大约 10,000)。
这就是问题实际发生的地方。现在,mysql (10,000) 行发送到 PHP 的所有结果都被发送到邮政编码计算器库,该库计算基本邮政编码和用户邮政编码之间的距离 - 10,000 次。然后按最近的邮政编码对结果进行排序。
如您所见,这是非常糟糕的优化代码。并且这 10,000 条记录循环了两次。更不用说每个 httpd 进程仅在 mysql 之间传输数据所需的 RAM 量。
我想问这里的大师,无论如何优化这个?
我有一些自己的想法,但我不确定它们的效率如何。
尝试在 mysql 本身中进行所有邮政编码的计算和排序,并返回分页的行数。为此,我需要将邮政编码计算逻辑之间的距离移动到存储过程。这样我就可以防止在 PHP 中处理 10,000 条记录。但是,仍然存在一个问题。我不需要计算已经计算的邮政编码的距离(对于具有相同邮政编码的 2 个用户)。
其次,如何使用存储过程对 mysql 中的行进行排序?
你们有什么感想 ?这是一个好方法吗?我可以期待使用它来提升性能吗?你有什么其他的建议 ?
我知道这个问题很大,我非常感谢您花时间阅读到最后。我真的很想听听您对此的看法。