我有疑问。我有一个不同对象的列表,在某些情况下(当 needToCheckActionCategory 为真时,我必须查询数据库以验证对象的种类。这是代码:
for ( Entry<String, MyObject> tosEntry : "listOfObject".entrySet() ) {
if ( tosEntry.getValue().getObjectType() == DHCConstants.ACTION ) {
if ( needToCheckActionCategory > 0 ) {
Integer entryCategory = pipelineDao.getObjectCategory(tosEntry.getKey());
if ( entryCategory != actionCategory ) {
continue;
}
}
[...]
}
}
现在我查询 needToCheckActionCategory 是否为真以及对象是否为 Action。
我的问题是:只查询数据库一次以询问所有对象的类别(在这种情况下我需要创建查询并考虑“listOfObject”以获取所有 ID)或查询更好吗?数据库当且仅当需要但对于单个对象?那么,回顾一下返回一个大对象的单个大查询或多个调用但返回一个小对象的查询?
这是一个web应用,我想优化这部分。
最佳答案
这里首先要注意的是:只有当您将代码确定为应用程序中的性能瓶颈时,您才应该对其进行优化(另请参阅 Effective Java by Josh Bloch 中的“第 55 条:明智地优化”)。在单个查询中检索所有数据会使您的代码更加复杂,这就是为什么您应该只在有显着且可衡量的好处时才这样做。
话虽如此,与使用不同标识符执行多个查询相比,单个查询版本可能快得多。这是因为通过 JDBC 执行的每个 Statement
都包含一些开销,例如DB 的语句解析、JDBC 驱动程序的结果集处理和 I/O 延迟。这种现象也被助记符“逐行,slow-by-slow”所熟知。
关于java - 单个查询与多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656195/