【发布时间】:2021-03-20 00:54:08
【问题描述】:
假设我有两个列表,其中包含从 mysql 查询返回的值(出于这个问题的目的,我将在此处将它们显示为已初始化,以便更容易查看列表的内容):
List<String> databaseResultsA = new ArrayList<>();
databaseResultsA.add("6");
databaseResultsA.add("7");
databaseResultsA.add("9");
List<String> databaseResultsB = new ArrayList<>();
databaseResultsB.add("4");
databaseResultsB.add("8");
databaseResultsB.add("2");
实际上,databaseResultsA 是使用 MySQL ORDER BY ASC 排序的,而 databaseResultsB 没有排序。另外值得注意的是,databaseResultsB 是从 databaseResultsA 对单独的数据库进行查询的结果。
我需要将两个列表组合起来并按升序排列,所以我在之后的代码中这样做:
List<String> combinedResults = Stream.concat(databaseResultsA.stream(), databaseResultsB.stream()).sorted().distinct().collect(Collectors.toList());
我对 databaseResultsA 进行排序的原因是我期望 databaseResultsA 需要比 databaseResultsB 更频繁地返回结果;因此,如果 databaseResultsB 为空,那么代码中的排序就会减少(databaseResultsA 可能为空,而 databaseResultsB 可能有结果,但我不希望这种情况像相反的那样频繁发生)。
我的问题是,我的逻辑听起来合理吗?或者在 MySQL 中对两个列表进行排序然后在代码中排序会更好吗?我猜这是一个应该根据具体情况来判断的事情,但只是想知道这是否有经验法则。
【问题讨论】:
-
Please update your question 带有示例数据。发布您的 MySQL 查询并说明您正在尝试做什么。目前你的问题很难想象,恐怕它只会被投票结束。
-
谢谢,我添加了更多信息。我没有包括 MySQL 查询,因为它们似乎不是问题的关键
-
我可能明白你的意思,但我认为还不清楚。假设您的 MySQL 查询类似于
SELECT * FROM tableA ORDER BY columnA ASC;除了ORDER BY,没有其他条件。我的问题是,用于排序的列是什么?使用该特定列进行排序有什么意义?既然要在 Java 代码中重新排序它们,为什么还要首先进行排序呢? -
为什么它们是否排序很重要?你如何处理这两个列表?你要合并它们吗?还是什么?
-
@RickJames 是的,感谢您的澄清,上面的示例已简化,但我正在合并结果 - 它们是来自两个单独数据库的结果,需要在预先输入的搜索中显示在搜索结果中bar,并且它们需要按升序排列。所以下面的解决方案对我来说很有意义,对查询进行排序,然后进行合并排序以获得更好的性能
标签: java mysql performance sql-order-by