數(shù)據(jù)庫為什么要使用二叉樹?
網(wǎng)友解答: 看了題目,覺得很好!看了題目描述,忍不住想打人。。。什么叫做像人一樣,直接就拿出來?百萬級,千萬級的數(shù)量你怎么看一下就拿出來?你能做到秒級甚至毫秒級拿出數(shù)據(jù)?我先吃顆降火藥,
看了題目,覺得很好!看了題目描述,忍不住想打人。。。
什么叫做像人一樣,直接就拿出來?百萬級,千萬級的數(shù)量你怎么看一下就拿出來?你能做到秒級甚至毫秒級拿出數(shù)據(jù)?
我先吃顆降火藥,然后這個(gè)題目我分兩個(gè)來答:
1,為什么二叉樹效率高?
我們都知道,現(xiàn)在是一個(gè)數(shù)據(jù)爆炸的時(shí)代,每天產(chǎn)生的數(shù)據(jù)以PB級計(jì)量,而查找數(shù)據(jù)就成了最基本的需求!
原始的查數(shù)據(jù)的方法就是順序的比較,直到找到符合條件的數(shù)據(jù),比如說1073741824(十億多)這么多的數(shù)據(jù)量,順序比較然后查找出來的次數(shù)平均為這個(gè)數(shù)的一半也就是五億多次,而使用二叉樹查找只需要log以2為底1073741824的對數(shù),也就是30次,換句話說你只需要比較30次就可以拿到你想要的數(shù)據(jù),五億次和30次,你說怎么選?我們來看下兩種方式的查找效率,數(shù)學(xué)表達(dá)和大O表示法
順序查找:y=x/2; O(N);
二叉樹查找:y=2^N;O(log2(n))
可以看到二叉樹的效率為對數(shù)級別,在數(shù)學(xué)效率圖上表示,就是數(shù)量級越大,效率越明顯(斜率低)!
當(dāng)然,二叉樹只是一個(gè)普通的樹結(jié)構(gòu),還有紅黑樹,B樹等特殊二叉樹!本文因?yàn)槠驎呵也惶幔?/p>
2,為什么數(shù)據(jù)庫要建索引以提高效率?
數(shù)據(jù)庫建索引,其實(shí)是一種以空間換時(shí)間的方式,流量時(shí)代,速度為王!
看個(gè)栗子:
加入一張表,每行的數(shù)據(jù)大約100k,而主鍵的大小為0.1K,在主鍵上建立索引之后,除了原始數(shù)據(jù),還需要維護(hù)一份索引數(shù)據(jù),比如數(shù)據(jù)是100萬,那么原始數(shù)據(jù)為10萬m,也就是1000G,而索引大小為1G,查找索引的速度只有原始數(shù)據(jù)的1/1000,然后從索引中取出對應(yīng)的原始數(shù)據(jù)所在的地址,直接尋址得到數(shù)據(jù),可以看出用少量的索引數(shù)據(jù)換得了查找效率的大幅度提升!
①,所以數(shù)據(jù)庫建索引,基本是必選的優(yōu)化策略!
②,索引并不是越多越好,比如你選擇了每個(gè)字段都建索引,相當(dāng)于你每一行的數(shù)據(jù)都額外維護(hù)了一份,而且加上尋址地址等,數(shù)據(jù)量變?yōu)樵瓉淼?倍以上,除此之外,每次新建數(shù)據(jù)都要重新維護(hù)索引,大量的索引絕對會把系統(tǒng)磨死。。。
③,索引選擇盡量避免重復(fù)的數(shù)據(jù)或者大量為null的數(shù)據(jù),否則索引失效!
④,索引方式有b+,hash等很多種方式,根據(jù)存儲引擎和數(shù)據(jù)類型選擇合適的索引!
關(guān)于二叉樹和索引只能粗略的講解到這了,更為詳細(xì)的講解改天挑時(shí)間再說吧,敬請關(guān)注。。。
網(wǎng)友解答:二叉樹是數(shù)據(jù)遍歷用時(shí)最少的的算法結(jié)構(gòu),如果數(shù)據(jù)庫中的數(shù)據(jù)只有一兩個(gè),直接比較就會快速找出你要的數(shù)據(jù),但是數(shù)據(jù)如果是成百上千呢?不是說電腦蠢,給你一張有一千個(gè)大小不同的數(shù)字,你需要多長時(shí)間才能找出最小的數(shù)字?對于簡單的數(shù)據(jù)而言,計(jì)算查找都很簡單,對于復(fù)雜的數(shù)據(jù)呢?既然是數(shù)據(jù)庫,那就不可能只是簡單的幾組數(shù)據(jù),而二叉樹的遍歷是對龐大的數(shù)據(jù)而言的,它比冒泡算法、遞歸算法、迭代算法以及圖的遍歷來說,較為快速,就你的描述來看,數(shù)據(jù)庫,你還沒有完全的搞懂,你還需更多的理論知識!