按任何列/属性对大型数据集进行排序

dgjrabp2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(348)

我有一个mysql数据库,在一些表中分布了大约2000万个条目(而且还在增长)。我的系统有一个功能,这些信息显示在页面中。所以,到目前为止还不错,我只需要使用sql进行一些连接,并通过页面大小限制结果集。
问题是现在我需要实现排序特性,这样用户就可以按任意列对数据进行排序。在所有列中添加索引似乎不是一个好的选择,如果不添加索引,将导致全表扫描。更糟糕的是:当按联接列排序时,sql的order by可能会更慢。
所以我开始考虑另一种可能性,比如将mysql与hadoop或spark集成,但我对此没有经验。
正确的道路是什么?haddop、spark、elasticsearch,或者使用mysql的其他策略,或者其他什么?
谢谢。

b09cbbtk

b09cbbtk1#

最好的选择可能是使用索引和范围分区的组合。分区将有效地创建许多较小的表,这些表作为一个表一起工作,并且可以作为一个表进行查询。
使用分区的一个关键好处是分区修剪。这意味着,当您在where子句中使用某些列时,查询规划器知道它需要查找哪些分区,哪些分区与该查询无关。只需搜索相关分区,查询速度就会更快。您可以按日期列或自动递增int(serial)之类的方式对表进行分区。
其他类型的分区包括散列和列表。如果是基于特定值进行查询,则哈希和列表通常更有用。这就是我建议分区的原因。
下面是关于分区表的一个很好的通用资源:您需要了解的关于mysql分区的所有信息
在这个stackexchange问题上选择的答案是关于向已经存在的表添加分区:如何向mariadb/mysql中的现有表添加分区?

相关问题