成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊樹狀結(jié)構(gòu)如何在數(shù)據(jù)庫(kù)中存儲(chǔ)

數(shù)據(jù)庫(kù)
昨天有人在QQ小組問起,無(wú)限分層的樹狀結(jié)構(gòu),數(shù)據(jù)量比較大,在一萬(wàn)條以上,如何設(shè)計(jì)數(shù)據(jù)庫(kù)的結(jié)構(gòu)。其實(shí)這是個(gè)老生常談的問題,一般的做法是有一個(gè) pid字段,為了提高效率,還會(huì)有個(gè)FullPath字段。

昨天有人在QQ小組問起,無(wú)限分層的樹狀結(jié)構(gòu),數(shù)據(jù)量比較大,在一萬(wàn)條以上,如何設(shè)計(jì)數(shù)據(jù)庫(kù)的結(jié)構(gòu)。其實(shí)這是個(gè)老生常談的問題,一般的做法是有一個(gè) pid字段,為了提高效率,還會(huì)有個(gè)FullPath字段。(一些人還設(shè)置一個(gè)層級(jí)字段,但我不知道這個(gè)字段有何作用),F(xiàn)ullPath字段可以用 id-id-id….這種方式拼字符串存儲(chǔ),這樣可以方便地用 like 語(yǔ)句進(jìn)行查詢某個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn)。

曾經(jīng)看到過另外一種存儲(chǔ)方式,利用了一般樹結(jié)構(gòu)可以轉(zhuǎn)換二叉樹的這一做法,用二叉樹進(jìn)行存儲(chǔ),在數(shù)據(jù)量大的情況下,存儲(chǔ)讀效率比上述的常見方案更優(yōu)些,所以特寫此文簡(jiǎn)單介紹一番。

下圖說明了這種方案

如圖所示,在每個(gè)節(jié)點(diǎn)上,有l(wèi)eft ,right兩個(gè)字段,我們看到,圖上從根節(jié)點(diǎn)順著子節(jié)點(diǎn)開始畫一條線,每深入一層left加一,到底后,right=left+1,然后順著節(jié)點(diǎn)回溯,right逐級(jí)加一,一直回到根節(jié)點(diǎn)。

如果要查詢某個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn),比如 fruit 節(jié)點(diǎn) ,條件為 where left between 2 and 11

要查某個(gè)節(jié)點(diǎn)的full path ,比如 banana,條件為 where left<8 and right >9

如果要插入某個(gè)節(jié)點(diǎn),比如red yellow直接插入一個(gè)節(jié)點(diǎn),則update left =left+2 where left>=7 ,update right=right+2 where right>7,然后 新節(jié)點(diǎn)的left rigt分別是 7,8。 刪除節(jié)點(diǎn)類似。

這種方式,因?yàn)閕d都是int型數(shù)據(jù),加上索引后,讀的效率較高。而fullPath字段的方案查詢時(shí)候用的是字符串操作like,效率較低。

在內(nèi)存中,如果要還原樹狀結(jié)構(gòu),即在每個(gè)節(jié)點(diǎn)上增加pid屬性和children屬性,則稍微麻煩些,可以如下操作:

  1. 按left between x and y order by left 取數(shù)據(jù)
  2. 順序遍歷數(shù)據(jù),如果left=上一個(gè)Left+1,則是上一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),設(shè)置兩個(gè)對(duì)象的父子關(guān)系,如果發(fā)生跳號(hào),則是上一個(gè)節(jié)點(diǎn)的兄弟節(jié)點(diǎn)。

OK,大致的方案就介紹到這里

原文鏈接:http://www.cnblogs.com/honghuamin/archive/2011/07/24/2115635.html

【編輯推薦】

  1. SQL Server如何動(dòng)態(tài)生成分區(qū)腳本
  2. 手把手教你建立SQL數(shù)據(jù)庫(kù)的表分區(qū)
  3. 說說抽象SQL(參數(shù)化)的查詢
  4. 淺述遠(yuǎn)程Service Broker的實(shí)現(xiàn)
  5. 自己動(dòng)手豐衣足食,DIY SQL字符串分解函數(shù)Split
責(zé)任編輯:艾婧 來(lái)源: 博客園
相關(guān)推薦

2018-01-26 13:28:48

數(shù)據(jù)庫(kù)數(shù)據(jù)重復(fù)數(shù)據(jù)庫(kù)清理

2024-05-26 10:29:29

2017-10-17 10:34:16

數(shù)據(jù)中心混合存儲(chǔ)

2009-10-27 16:36:07

Oracle如何解鎖

2009-06-01 09:57:43

netbeans連接數(shù)netbeans數(shù)據(jù)庫(kù)netbeans連接m

2011-03-03 10:00:14

ProFTPD建立MySQL

2024-07-30 08:00:00

Kubernetes數(shù)據(jù)庫(kù)

2011-05-25 13:37:15

數(shù)據(jù)庫(kù)

2011-03-11 13:26:23

SQL Server數(shù)導(dǎo)入數(shù)據(jù)

2023-09-05 08:40:57

刪除數(shù)據(jù)庫(kù)Oracle

2020-11-16 08:56:02

Python

2021-03-01 10:20:52

存儲(chǔ)

2021-02-22 10:37:47

存儲(chǔ)Prometheus

2023-07-26 15:52:05

2022-09-23 07:44:48

時(shí)序數(shù)據(jù)庫(kù)物聯(lián)網(wǎng)

2023-01-06 08:31:53

數(shù)據(jù)庫(kù)基準(zhǔn)測(cè)試

2024-10-12 15:29:56

2023-01-26 00:18:53

云原生數(shù)據(jù)庫(kù)云資源

2021-10-28 19:28:04

數(shù)據(jù)庫(kù)開發(fā)Spring

2018-04-12 11:20:16

MySQLmybatisJava
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91视频在线观看 | 午夜爱爱毛片xxxx视频免费看 | 成人动漫视频网站 | 亚洲一区二区中文字幕 | 国产精品久久网 | 精品麻豆剧传媒av国产九九九 | 国内成人免费视频 | 成人片免费看 | 午夜精品久久 | 精品欧美一区二区在线观看欧美熟 | 日韩av在线一区 | 亚洲 欧美 另类 综合 偷拍 | 欧美aaa一级片| 国产高清久久久 | 亚洲视频欧美视频 | 97免费在线观看视频 | 久久一日本道色综合久久 | 中国xxxx性xxxx产国 | 韩三级在线观看 | 中文字幕国产视频 | 亚洲欧美中文日韩在线v日本 | 成人一级毛片 | 亚洲一区综合 | 日韩中文字幕一区二区 | 欧美黄在线观看 | 亚洲 成人 在线 | 成人国产精品视频 | 欧美日韩国产精品一区 | 欧美性猛交一区二区三区精品 | 日韩美女在线看免费观看 | 黄视频免费| 亚洲国产精品久久人人爱 | 中文二区 | 国产精品久久国产精品 | 久久精品| 亚洲精品电影网在线观看 | 成人av一区二区三区 | 亚洲欧美日韩精品久久亚洲区 | 91精品久久久久久久久中文字幕 | 色网站在线免费观看 | 国产成人午夜高潮毛片 |