【发布时间】:2014-10-13 18:54:21
【问题描述】:
想象一下这种情况,我有一个实体的 Id,并且我有一个喜欢的列表,其中包含同一类的一些实体。要找到实体,在链表中执行 for 或在数据库中执行 select 什么时候更快?
我的意思是,例如,当我在链接列表中有大约 5 个实体时,我想 for 会更快,而当我有数百万个实体时,select 会更快。
但是当select开始比for快的时候呢?
【问题讨论】:
-
最快的似乎是使用底层数据库的非标准递归选择机制(例如带有SQLServer的公用表表达式)。不确定hibernate是否可以被操纵以利用它。
-
内存中的数据结构比扫描列表更有效。事实上,您的数据库库最终将使用一些您可以直接在代码中使用的算法。
-
为什么你会有数百万个实体在内存中,在一个链表中?我无法想象有一个很好的理由会陷入这种境地。通常,对加载到内存中的对象进行一些测试比通过数据库、网络或至少跨不同进程执行 SQL 查询要快得多。对于数百万个实体来说可能不是这样(因为数据库可以使用比迭代更快地找到行的索引),但无论如何都不应该发生这种情况。
-
链表是最慢的搜索集合之一,我只是在考虑最坏的情况。但实际情况是具有实体列表的面孔组件。在我的转换器中,我可以通过此列表找到或在数据库中搜索。
标签: java database performance hibernate jpa