java - 查询数据库什么效率更高
问题描述
我们是否应该通过在 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 过滤器
注意:上面的例子我取了名字以便于理解。在实时中,数据非常庞大,并且表中有多个字段和行。用于过滤的列表也很大。
解决方案
最好的方法是在数据库上使用所需的过滤器进行查询,这将减少从应用程序和数据库来回获取您的数据量,并且还将减少 I/O 操作的时间(因为它涉及通过网络传输大量数据的一些延迟)。还减少了在应用程序端处理大量数据所需的内存开销。
此外,当您在多个字段上运行查询和过滤时,您可以在字段上添加索引(如有必要),这将提高查询获取时间。
希望能解答
推荐阅读
- javascript - 如何在索引中使用表达式时遍历数组数组
- python - Python pandas数据框根据字符串长度更改内容
- java - 如何在 JFrame 窗口中实时显示多个图像?
- docker - 为什么无人机无法使用插件/docker 找到我的仓库名称?
- php - 从会话数组 php 中获取单个元素以通过 MySQL SELECT 语句
- javascript - 防止 MongoDB 中的重复文档?
- javascript - 对类别和子类别的数组进行排序
- python - 在python pandas中连接两个数据框中的选定列
- java - 为什么 .length 给我返回语句的长度而不是用户输入?
- php - 在 Codeigniter 中生成 URL 安全的加密 id