【发布时间】:2019-05-24 21:48:39
【问题描述】:
我最近参加了一次面试,有人问了我一个问题
我们有一张桌子employee(id, name)。在我们的 java 代码中,我们正在编写一个逻辑来从该表中获取数据并将其显示在 UI 中。查询是
Select id,name from employee
查询是在调试过程中,我们发现这个 jdbc 调用触发查询并获取输出需要 20 秒,我们希望将其减少到 5 秒或最佳时间。我们如何才能做到这一点,或者我将如何解决这个问题?
由于查询中没有where clause,我不建议对该列进行索引。
由于这个逻辑每次都需要 20 秒,所以其他一些代码在这个表上锁定也是不可能的。
我建议限制从表中提取的记录数量应该会有所帮助,但面试官看起来并不相信
作为开发人员,我们还能做些什么来优化调用。我猜 DBA 可能会调整数据库设置以提高此查询的性能,但有没有其他方法
【问题讨论】:
-
如果您使用一些 ORM 工具(如休眠),您可以启用缓存...但我不知道在有两列的表中为什么需要这样的性能增强...javabeat.net/introduction-to-hibernate-caching
-
如果生成的 List/Map 很少更改,则可以在本地缓存初始结果以避免未来的数据库命中。或者如果结果偶尔发生变化,那么仍然缓存一段合理的时间,当它过期时立即获取更新的结果到缓存中(而不是在实际需要时等待)。