久久久精品网站,成人伊人网,色吧av色av,亚洲AV永久无码精品秋霞电影影院

索引(索引和目錄的區(qū)別)

前沿拓展:


數(shù)據(jù)庫索引對于程序開發(fā)人員都不陌生。開發(fā)系統(tǒng)時,都會使用各種各種的sql語句,最多的就是查詢語句,為了提高系統(tǒng)的響應(yīng)速度或者從數(shù)據(jù)庫查詢數(shù)據(jù)更快,都會尋找查詢比較慢的SQL查詢,分析完原因之后,就會在數(shù)據(jù)表中加上索引。那什么是索引呢?

簡單說索引就像書的目錄一樣。一本1000頁的書,如果你想快速找到其中的某一個知識點(diǎn),在不借助目錄的情況下,那我估計你可得找一會兒。同樣,對于數(shù)據(jù)庫的表而言,索引其實(shí)就是它的“目錄”。

索引的出現(xiàn)其實(shí)就是為了提高數(shù)據(jù)查詢的效率。

,比如你要保存的是2018年某個城市的所有人口信息,這類不會再修改的數(shù)據(jù)。

二叉搜索樹也是最經(jīng)典數(shù)據(jù)結(jié)構(gòu)了,還是上面根據(jù)身份證號查名字的例子,如果我們用二叉搜索樹來實(shí)現(xiàn)的話,示意圖如下所示:

索引(索引和目錄的區(qū)別)

二叉搜索樹示意圖

二叉搜索樹的特點(diǎn):每個節(jié)點(diǎn)的左兒子小于父節(jié)點(diǎn),父節(jié)點(diǎn)又小于右兒子。這樣如果你要查ID_card_n2的話,按照圖中的搜索順序就是按照UserA -> UserC -> UserF -> User2這個路徑得到。這個時間復(fù)雜度是O(log(N))。

索引(索引和目錄的區(qū)別)

二叉樹搜索算法

當(dāng)然為了維持O(log(N))的查詢復(fù)雜度,你就需要保持這棵樹是平衡二叉樹。為了做這個保證,更新的時間復(fù)雜度也是O(log(N))。

樹可以有二叉,也可以有多叉。多叉樹就是每個節(jié)點(diǎn)有多個兒子,兒子之間的大小保證從左到右遞增。二叉樹是搜索效率最高的,但是實(shí)際上大多數(shù)的數(shù)據(jù)庫存儲卻并不使用二叉樹。其原因是,索引不止存在內(nèi)存中,還要寫到磁盤上。

你可以想象一下一棵100萬節(jié)點(diǎn)的平衡二叉樹,樹高20。一次查詢可能需要訪問20個數(shù)據(jù)塊。在機(jī)械硬盤時代,從磁盤隨機(jī)讀一個數(shù)據(jù)塊需要10 ms左右的尋址時間。也就是說,對于一個100萬行的表,如果使用二叉樹來存儲,單獨(dú)訪問一個行可能需要20個10 ms的時間,這個查詢可真夠慢的。

為了讓查詢過程盡量少的讀磁盤,就必須讓查詢過程訪問盡量少的數(shù)據(jù)塊。那么,我們就不應(yīng)該使用二叉樹,而是要使用“N叉”樹。這里,“N叉”樹中的“N”取決于數(shù)據(jù)塊的大小。

以InnoDB的一個整數(shù)字段索引為例,這個N差不多是1200。這棵樹高是4的時候,就可以存1200的3次方個值,這已經(jīng)17億了??紤]到樹根的數(shù)據(jù)塊總是在內(nèi)存中的,一個10億行的表上一個整數(shù)字段的索引,查找一個值最多只需要訪問3次磁盤。其實(shí),樹的第二層也有很大概率在內(nèi)存中,那么平均訪問磁盤的次數(shù)就更少了。

N叉樹由于在讀寫上的性能優(yōu)點(diǎn),以及適配磁盤的訪問模式,已經(jīng)被廣泛應(yīng)用在數(shù)據(jù)庫引擎中了。

不管是哈希還是有序數(shù)組,或者N叉樹,它們都是不斷迭代、不斷優(yōu)化的產(chǎn)物或者解決方案。數(shù)據(jù)庫技術(shù)發(fā)展到今天,跳表、L**樹等數(shù)據(jù)結(jié)構(gòu)也被用于引擎設(shè)計中,這里我就不再一一展開了。

你心里要有個概念,數(shù)據(jù)庫底層存儲的核心就是基于這些數(shù)據(jù)模型的。每碰到一個新數(shù)據(jù)庫,我們需要先關(guān)注它的數(shù)據(jù)模型,這樣才能從理論上分析出這個數(shù)據(jù)庫的適用場景。

截止到這里,我用了半篇文章的篇幅和你介紹了不同的數(shù)據(jù)結(jié)構(gòu),以及它們的適用場景,你可能會覺得有些枯燥。但是,我建議你還是要多花一些時間來理解這部分內(nèi)容,畢竟這是數(shù)據(jù)庫處理數(shù)據(jù)的核心概念之一,在分析問題的時候會經(jīng)常用到。當(dāng)你理解了索引的模型后,就會發(fā)現(xiàn)在分析問題的時候會有一個更清晰的視角,體會到引擎設(shè)計的精妙之處。

MySQL中,索引是在存儲引擎層實(shí)現(xiàn)的,索引分為主鍵索引(key)、全文索引(FULLTEXT)、普通索引(NORMAL)、空間索引(SPATIAL)、唯一索引(UNIQUE),具體詳解在下一篇介紹。

拓展知識:

原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請注明出處:http://xiesong.cn/77498.html

国产一级淫片免费视频| 精品国产乱码久久久久久小说| 亚洲免费成视频| 中文字幕在线观看不卡| 亚洲一二三四AV| 精品久久久久中文字| 一人涩涩| 亚洲网站一区二区| 欧美日韩精品国产综合| 日韩第三区| 国产坐爱精品| 天天操狠狠操夜夜操| 青青草向日葵在线看| 无码窝999| 婷婷丁香五月亚洲综合| 开心五月激情婷婷| 涩爱AV网| av高清不卡| 天天爽天天舔天天狠| 免费人妻无码不卡中文字幕系| 白浆流出来了在线观看| 亚洲欧美精品一中文字幕| 澳门成人三级在线| 国内揄拍国内精品人妻| 日韩欧美日韩在线观看| 在线精品自偷自拍无码中文| 瀑乳中文字幕在线| 红桃影院| 色五月婷婷总合| 亚洲精品福利在线| 国产白丝无码免费视频| H 成 人 版专区| 色噜噜狠狠狠狠色综合久一| 天天干天天日干天天射| 国产精品天天看大片特色视频| 91色欲一区二区不卡| 日本有码在线观看| 婷婷五月天精品| 国产精品久久久久久婷婷| 亚州婬娃网| 色噜噜国产精品视频一区二区互动交流 |