【发布时间】:2020-07-27 14:29:33
【问题描述】:
我有大约 100 万个地址,而且还会更多。对于每个地址,我需要知道位置(纬度、经度)。
某些地址可能重复。例如,两条记录:“USA, New York, Times Square”和“USA New York Times Square”。我将这些地址标准化为“美国纽约时代广场”并将它们存储在表“cached_addresses”中,以便稍后当我需要知道地址的纬度/经度时,我可以查询此表。
主要问题是:我可以存储 md5/sha1/sha256 哈希来获得一些性能提升/存储优化吗?
有问题的查询是:SELECT lat, lng FROM cached_addresses WHERE address = ?,参数? 等于usa new york times square。这里的address表示规范化的地址字符串。
使用哈希将是:SELECT lat, lng FROM cached_addresses WHERE address = ?,参数? 等于hash_function('usa new york times square')。这里的address表示标准化地址字符串的hash。
我用的是postgresql,但是如果mysql可以提供一些性能/存储优化,也可以使用。
【问题讨论】:
-
看来您已经知道可以存储地址字段的哈希以及如何查询它。您的问题是关于“我可以”还是“我应该……优化查询”?
-
你可以吗?找出答案的一种方法:对其进行基准测试。
-
附带说明,将解析后的地址保存为文本(并保存在多个字段中)可能很有用,这样对标准化程序的任何更改都可以应用于地址缓存。地址变更也是如此(街道名称变更、城市合并、邮政编码变更等)
标签: mysql postgresql hash geolocation