如何在 MySQL table 中存储数据以便快速访问?

How to store data for fast access in a MySQL table?

假设我有这个字段:

first name, last name, city, state, zip, lat, lng

我正在尝试找到一种存储数据的方法,以便我可以进行如下查询:

假设我有数百万条记录,不确定是否最好的选择是将它们全部放在一个单独的文件中table。

我可以按州拆分它们,但这样我就必须在搜索时进行大量连接。

有什么想法吗?

加入越多,速度就越慢。如果数据需要以关系方式构建以实现长期可维护性和可扩展性,那么就这样做。

MySQL table 不一定是您的快速搜索查询所在的位置。

您可以使用 Hadoop + Hive 的 MapReduce 来高速查询大量数据,或者,可能更容易实现,您可以构建一个查询所针对的 Solr 索引。

一般来说,您不会在 MySQL 或任何关系数据库中实现非常快速的可搜索大型数据集,MySQL 是一个很棒的关系数据库存储,并且会很快。但是,根据您的搜索和记录数量,您将需要以不同方式对数据进行分组和聚合,这就是像 Solr 或 NoSQL persistence/view 这样的数据可以为您提供所需速度的地方。

一个table,与

INDEX(last_name, first_name, city)
INDEX(lat)

第一个索引处理您的第一对搜索。最后一个partially有助于按半径搜索;它可能只适合一百万行。

对于更多行,"nearest" 需要更多 more complex approach

其他一些方法将简单地暴力搜索整个列表。那是 适合 "nearest"。