我們使用具有名爲docid的列和名爲parentid的列的表來存儲Oracle數據庫中文檔之間的關係。如果我有一個與子文檔child1_1和child1_2相關的文檔doc1,它們將由Documents表中的以下記錄表示。在SQL中實現排序鍵
docid parentid
1000 null record for doc1
1001 1000 " " child1_1
1002 1000 " " child1_2
文檔表可以有幾百萬行的,所以要確保所有相關文件都集合在我們的UI,我們使用sortedfamily命名索引VARCHAR列的文件表預先排序,並串聯填充它的相關文件的docids。如果不使用sortedfamily列,則在查詢時對記錄進行排序太慢。上面顯示的記錄成爲。
docid parentid sortedfamily
1000 null 1000 record for doc1
1001 1000 1000_1001 " " child1_1
1002 1000 1000_1002 " " child1_2
這使我們可以在查詢中添加'ordered by sortedfamily',返回的記錄將總是按相關文檔排序。我上面概述的工作非常好,但它有一些與文檔系列分層深度有關的限制,並且感覺奇怪的拼接整數來排序記錄。有沒有辦法做到以上只使用整數?
在此先感謝。
更新:我上面的示例不夠詳細。孩子們自己也可能有相關的文件。如果child1_1擁有相關文檔,那麼sortedfamily的結果值可能爲「1000_1001_2000」。
如果先按parentid排序,再按docid排序會怎樣。 Order by COALESCE(parentid,docid),docid – Gentlezerg 2013-05-02 03:13:18
Documents表可以包含數百萬行,並且我們發現如果沒有包含排序鍵的列,則表現是不合格的。 – user481779 2013-05-02 03:42:54