什么是查询数据库更有效的方法

时间:2019-02-20 19:52:15

标签: java mysql performance java-8 coding-efficiency

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

寻找有效的编码方法

示例:

具有多列ID,名称,位置的表。

我需要使用Place来提取ID列表,形式应该是placeList,而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过滤器应用于结果

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

3 个答案:

答案 0 :(得分:0)

如果可能,您始终希望在数据库中执行操作。您要避免只用在内存上就将数据从数据库传输到应用程序,而要用尽内存。

数据库在执行这些操作时非常有效,因此您需要充分利用它们。

答案 1 :(得分:0)

直接查询数据库,而不是在Java应用程序中下载数据。它将减少从数据库到Java应用程序的延迟。

但是在过滤器中使用用户输入时要非常小心。在将用户输入用于查询数据库之前,请确保已清除用户输入,以避免SQL注入。

如果您担心安全而不是性能,那么请在Java App中过滤数据(如果数据不是很大)。

但是我强烈建议您通过确保必要的保护措施来过滤数据库本身上的数据。

答案 2 :(得分:0)

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

另外,当您在多个字段上运行查询和过滤时,可以在字段上添加索引(如果需要),这将缩短查询获取时间。

希望它能回答