我有一个数据库表像这样有大约100万行:优化数据库查询嵌套数据
id prev curr next
1 25 26 27
2 26 27 28
3 27 45 46
4 45 46 47
5 46 47 48
6 47 59 41
..............
..............
在Java端,我需要做的是,对于像 给定的输入(CURR = 45和diff = 2),我需要得到像45,27,26这样的项目列表。 对于输入(curr = 59和diff = 1),我需要得到59,47 正如你在上面看到的, prev和next并不总是比curr值小1和1。
目前我在java中做的是基于差异值,我查询表来获得curr的prev。 然后使用prev作为curr,我再次查询表并继续,直到我找到我想要的。但是对于像20或30这样较高的差异值,这是过多的数据库调用。
有没有人有任何想法在1 DB查询做这一切?由于表中的行数太多,因此在本地获取并保留数据不是一种选择。
与编辑答案评论:
- 表包含其他列太等数据将不仅是16MB。我只是删除了不相关的列。
- curr字段中没有重复。
- 还有其他函数使用curr和nextv类似于prev和curr。
- 这不是一棵树的结构。所以最后一行是一个有效的行。
我不认为你可以做到这一点使用一个查询,可能与20个查询可以覆盖链lenght高达20但这是荒谬的。为这个任务写一个存储过程可能是最好的。 在极端的情况下,你会经常做这么长的链,其中有一百万行不是很多数据,只有大约16Mb – 2013-02-08 16:31:24
curr字段中可能有重复的值吗?如果是这样,你想做什么? – 2013-02-08 16:33:16
为什么你需要将'prev','current'和'next'作为表中的列? “当前”和“下一个”不够?你可以在'current'和'next'的帮助下确定'prev'。 – jlordo 2013-02-08 16:33:29