【问题标题】:How to store data for fast access in a MySQL table?如何在 MySQL 表中存储数据以便快速访问?
【发布时间】:2017-04-27 22:07:56
【问题描述】:

假设我有这个字段:

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

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

  • 按名称或名称和城市搜索
  • 按半径搜索

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

我可以按状态拆分它们,但是在搜索时我必须做一堆连接。

有什么想法吗?

【问题讨论】:

    标签: mysql sql datatables database-performance sqlperformance


    【解决方案1】:

    您拥有的连接越多,速度就越慢。如果为了长期可维护性和可扩展性,需要以关系方式对数据进行结构化,那么就这样做吧。

    该 MySQL 表不必是您的快速搜索查询所针对的位置。

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

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

    【讨论】:

      【解决方案2】:

      一个表,有

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

      第一个索引处理您的第一对搜索。最后一个部分帮助按半径搜索;它可能只用于一百万行就足够了。

      对于更多的行,“最近”需要很多 more complex approach

      其他一些方法将简单地暴力搜索整个列表。这适合“最近”。

      【讨论】:

        猜你喜欢
        • 2020-04-16
        • 2012-05-05
        • 2015-04-07
        • 1970-01-01
        • 2021-08-02
        • 1970-01-01
        • 2014-06-10
        • 2012-04-05
        • 2018-08-19
        相关资源
        最近更新 更多