首页 > 解决方案 > 查询数据库什么效率更高

问题描述

我们是否应该通过在 SQL 查询中添加多个条件/where 子句来查询具有更多过滤的表并获取特定数据,或者提取所有数据并在我们的 java 类中进行过滤。

寻找编码实践的有效方式

例子 :

具有多列 Id、Name、Place 的表。

我需要使用 Place 提取 id 列表,该列表应为 placesList,Name 应与 namesList 匹配。

1)

(SELECT id 
   FROM Person p 
  WHERE p.name IN (<name_list>) 
    AND p.place IN (<place_list>) 
  order 
     by p.id asc)

public List<Long> getIds(@BindIn("name_list") List<String> name_list, @BindIn("place_list") List<String> place_list);

或者

2)

(SELECT id 
   FROM Person p)

公共列表 getIds(); 对结果应用 java8 过滤器

注意:上面的例子我取了名字以便于理解。在实时中,数据非常庞大,并且表中有多个字段和行。用于过滤的列表也很大。

标签: javamysqlperformancejava-8coding-efficiency

解决方案


最好的方法是在数据库上使用所需的过滤器进行查询,这将减少从应用程序和数据库来回获取您的数据量,并且还将减少 I/O 操作的时间(因为它涉及通过网络传输大量数据的一些延迟)。还减少了在应用程序端处理大量数据所需的内存开销。

此外,当您在多个字段上运行查询和过滤时,您可以在字段上添加索引(如有必要),这将提高查询获取时间。

希望能解答


推荐阅读