我有一個數據庫表像這樣有大約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