【发布时间】:2012-12-26 16:48:06
【问题描述】:
我有一个包含大约 2000 万行的 CSV 文件,我想在我的 Web 应用程序中使用它。数据是邮政编码到实际街道地址的映射,格式如下:
[zip_or_postal_code] [street_number] [street_name] [city] [state_or_province] [country]
我的目标是将查找(按邮政编码/邮政编码搜索)保持在 200 毫秒以下。
我不确定这是否会有所作为,但我正计划执行以下操作:
- 将
state/province、country和city列移动到它们自己的表中,并在我的主表中引用这些列,以避免不必要的膨胀。 - 一些邮政编码覆盖多个街道和地址,因此我将合并数据并拥有 1 个邮政编码并将多个地址存储在类似 varchar 的内容中。这应该会从表中减少几百万行。
我可以做哪些优化来帮助提高查找速度?例如,Google 的反向地理定位 API 在 300 毫秒内返回结果,其中包括 HTTP 开销。他们是怎么做到的?
另外,我对使用其他数据库持开放态度,但由于我已经在使用 MySQL,那会更好。
编辑:查找将始终通过邮政编码完成,例如:给定邮政编码 12345,我需要返回街道#( s)/姓名、城市、州和国家。但是,街道#(s)/name(s) 将存储为单个字符串字段,因此我的应用将负责解析它们。
【问题讨论】:
-
表的 DDL 是什么?你有索引吗?什么是典型的查询(给出 SQL)?如果您添加这些详细信息,可能会更容易发表评论。
-
您是否尝试过基本情况(一个索引在
zip_code上的普通表)?我不相信你需要为此做任何特别的事情。 -
@seandavi:感谢您的评论。我对数据库还不太了解,所以只能解决查询问题。
-
@BrendanLong:我还没有,不,因为我的数据包含相同邮政编码的多个条目。我必须先清理它,然后才能导入它,但我认为拥有约 10-1500 万行的表会导致查找缓慢,不是吗?
-
@jam3s17 你应该继续假设这会正常工作。按照数据库标准,20M 行并不大,所以我怀疑您会对带有邮政编码索引的简单表的性能感到惊讶。
标签: mysql lookup latency large-data