03.01 數據庫為什麼要使用二叉樹?

嘻嘻1991


看了題目,覺得很好!看了題目描述,忍不住想打人。。。

什麼叫做像人一樣,直接就拿出來?百萬級,千萬級的數量你怎麼看一下就拿出來?你能做到秒級甚至毫秒級拿出數據?

我先吃顆降火藥,然後這個題目我分兩個來答:

1,為什麼二叉樹效率高?

我們都知道,現在是一個數據爆炸的時代,每天產生的數據以PB級計量,而查找數據就成了最基本的需求!

原始的查數據的方法就是順序的比較,直到找到符合條件的數據,比如說1073741824(十億多)這麼多的數據量,順序比較然後查找出來的次數平均為這個數的一半也就是五億多次,而使用二叉樹查找只需要log以2為底1073741824的對數,也就是30次,換句話說你只需要比較30次就可以拿到你想要的數據,五億次和30次,你說怎麼選?我們來看下兩種方式的查找效率,數學表達和大O表示法

順序查找:y=x/2; O(N);

二叉樹查找:y=2^N;O(log2(n))

可以看到二叉樹的效率為對數級別,在數學效率圖上表示,就是數量級越大,效率越明顯(斜率低)!


當然,二叉樹只是一個普通的樹結構,還有紅黑樹,B樹等特殊二叉樹!本文因為篇幅原因暫且不提!


2,為什麼數據庫要建索引以提高效率?

數據庫建索引,其實是一種以空間換時間的方式,流量時代,速度為王!

看個栗子:

加入一張表,每行的數據大約100k,而主鍵的大小為0.1K,在主鍵上建立索引之後,除了原始數據,還需要維護一份索引數據,比如數據是100萬,那麼原始數據為10萬m,也就是1000G,而索引大小為1G,查找索引的速度只有原始數據的1/1000,然後從索引中取出對應的原始數據所在的地址,直接尋址得到數據,可以看出用少量的索引數據換得了查找效率的大幅度提升!

①,所以數據庫建索引,基本是必選的優化策略!

②,索引並不是越多越好,比如你選擇了每個字段都建索引,相當於你每一行的數據都額外維護了一份,而且加上尋址地址等,數據量變為原來的2倍以上,除此之外,每次新建數據都要重新維護索引,大量的索引絕對會把系統磨死。。。

③,索引選擇儘量避免重複的數據或者大量為null的數據,否則索引失效!

④,索引方式有b+,hash等很多種方式,根據存儲引擎和數據類型選擇合適的索引!

關於二叉樹和索引只能粗略的講解到這了,更為詳細的講解改天挑時間再說吧,敬請關注。。。


此生唯一


二叉樹是數據遍歷用時最少的的算法結構,如果數據庫中的數據只有一兩個,直接比較就會快速找出你要的數據,但是數據如果是成百上千呢?不是說電腦蠢,給你一張有一千個大小不同的數字,你需要多長時間才能找出最小的數字?對於簡單的數據而言,計算查找都很簡單,對於複雜的數據呢?既然是數據庫,那就不可能只是簡單的幾組數據,而二叉樹的遍歷是對龐大的數據而言的,它比冒泡算法、遞歸算法、迭代算法以及圖的遍歷來說,較為快速,就你的描述來看,數據庫,你還沒有完全的搞懂,你還需更多的理論知識!


分享到:


相關文章: