如何在 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"。
假设我有这个字段:
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"。