【发布时间】:2014-09-30 13:28:57
【问题描述】:
我在包含文件夹/文件的数据库中有一个表。每个文件夹可以包含多个文件和文件夹,其中可以包含更多文件夹等。我的表有 3 个重要属性。
- 身份证
- 父代
- 姓名
现在我要做的是在获得文件/文件夹的 id 时获取文件/文件夹的完整路径。(顶级文件夹 parentid 为空)
问题是我能看到的唯一方法就是这样做
while (continue) {
"select (parentid) from table where id = (id)"
if(parentid equals null) {
continue is false;
} else {
path += "/" + parentid(name);
}
}
对不起可怜的psudo
但它会继续获取父文件夹,直到不再存在,然后我可以制作我的路径
但这似乎是一种非常低效的方法。特别是如果我必须处理数十万个文件并且我必须为每个文件/文件夹执行此操作。
会不会有更简单更高效的sql查询。
【问题讨论】:
-
除非你试过,不然怎么知道效率低?
-
tbh 我只是假设,对数据库的许多调用会是?
-
如果您真的想提高效率(完整路径的单个查询),您可能必须更改存储数据的方式。看看Joe Celko's Trees and Hierarchies in SQL for Smarties。
-
如果事实证明这不是高性能的,您可以使用连接搜索深度为 2,这可能会花费一半的时间。但是在 Java 性能调优方面工作了十多年,我建议您不要试图猜测您的性能瓶颈是什么,因为它很可能不是您在测量时所想的那样。
-
使用现代 DBMS,您可以使用单个 SQL 语句来完成 - 但对于 MySQL,您会遇到类似的问题(无论是存储过程还是 Java 代码 - 解决方案本身基本相同)
标签: java mysql sql performance jdbc