【发布时间】:2011-08-06 05:56:12
【问题描述】:
因此,我在 MySQL 上进行了大量选择,并取回了大量数据 - 按索引排序。
例如:
select * from nodes where config_id = 1;
给予(仅显示相关性)
| definition_id (PK) | position | parent |
-------------------------------------------
90 1 0 << "root"
08 2 0
34 3 0
22 4 0
17 1 7 << another defn_id
38 2 7
23 3 7
07 1 90
如果这没有意义,想象一下定义一棵树,其中 90、8、34 和 22 是根的子节点。
那么 7 是 90 的孩子,而 17、38、23 是 7 的孩子(根的孙子)。
为了处理这个问题,我们找到所有父节点为 0 的节点,将它们添加进去,然后查看所有这些节点,看看它们是否有子节点(通过从父节点获取它们,或者看不到任何值并处理它作为一片叶子)。如果他们有孩子,添加他们,并继续递归,直到树建成。
这不是最有效的数据存储,但其中一个要求是“单行更改”以移动节点子集和所有子节点。我宁愿定义一个字符串 0.1.6 等,但事情就是这样。
所以这在测试中工作得相当好,但是当我们需要每天执行 100,000 次时(没有缓存 - 没有意义,都略有不同) - 我们需要尽可能少地访问数据库(即一)。简单,你说,只要抓住整个地段和过程。但是,它们并不都是有序的——正如你在上面看到的,90 低于 7。是的,这些例子是纵容的,但它说明了我们需要某种有序的问题。
基本上,简而言之,问题是,他们是在 ResultSet 上进行子选择的一种简单(而且最好是便宜)的方法 - 即将父 == 7 的所有结果抓取到另一个 ResultSet 中并进行处理?
永恒的爱和感激以换取思想/cmets。
【问题讨论】:
标签: java mysql resultset subquery