何时使用查询或代码

dgm*_*ora 7 sql database java-ee

我要求Java + JPA/Hibernate + Mysql的具体案例,但我认为你可以将这个问题应用到很多语言中.

有时我必须对数据库执行查询以获取某些实体,例如员工.假设你需要一些特定的员工(以'John'作为他们的名字的员工),你宁愿做一个返回这个确切的员工的查询,或者你更愿意搜索所有员工然后使用编程语言来检索你感兴趣的那些?为什么(轻松,高效)?哪个(一般来说)效率更高?

根据表格大小,一种方法比另一种更好吗?

考虑到:

  • 两种情况下的复杂性和可重用性相同.

use*_*019 10

始终对数据库进行查询.如果不这样做,则必须将更多数据复制到客户端,并且编写数据库以有效地过滤数据,几乎肯定比代码更有效.

我能想到的唯一例外是过滤条件是否计算复杂,并且您可以将计算分散到比数据库更多的CPU功率上.

在我拥有数据库的情况下,服务器拥有比客户端更多的CPU能力,因此除非过载,否则只需更快地运行查询以获得相同数量的代码.

此外,您必须使用Hibernates查询语言编写较少的代码来对数据库进行查询,而不是必须编写代码来操作客户端上的数据.Hibernate查询还将在配置中使用任何客户端缓存,而无需编写更多代码.


das*_*ght 4

编程中经常使用一个通用技巧——支付内存来提高运行速度。如果您有很多员工,并且您要一一查询其中的很大一部分(例如,一次查询 75%),然后查询所有内容,并将其缓存(非常重要!),并完成内存中的查找。下次查询时,跳过到 RDBMS 的旅程,直接进入缓存并进行快速查找:与内存中的哈希查找相比,到数据库的往返非常昂贵。

另一方面,如果您要访问一小部分员工,则应该只查询一名员工:从 RDBMS 到您的程序的数据传输需要大量时间、大量网络带宽、大量内存, RDBMS 端有大量内存。查询大量行并丢弃除一行之外的所有行是没有意义的。