内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Mysql聚簇索引和非聚簇索引-創(chuàng)新互聯(lián)

Mysql聚簇索引和非聚簇索引##

參考如下:

創(chuàng)新互聯(lián)建站長期為上千余家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為船營企業(yè)提供專業(yè)的網站建設、成都網站設計,船營網站改版等技術服務。擁有10多年豐富建站經驗和眾多成功案例,為您定制開發(fā)。
  • 淺談聚簇索引和非聚簇索引的區(qū)別
  • mysql的聚簇索引與非聚簇索引的簡短總結

在mysql數據庫中,myisam引擎和innodb引擎使用的索引類型不同,myisam對應的是非聚簇索引,而innodb對應的是聚簇索引。聚簇索引也叫復合索引、聚集索引等等。
聚簇索引:“聚簇”的意思是數據行被按照一定順序一個個緊密地排列在一起存儲。一個表只能有一個聚簇索引,因為在一個表中數據的存放方式只有一種。
非聚簇索引:又叫二級索引。二級索引的葉子節(jié)點中保存的不是指向行的物理指針,而是行的主鍵值。當通過二級索引查找行,存儲引擎需要在二級索引中找到相應的葉子節(jié)點,獲得行的主鍵值,然后使用主鍵去聚簇索引中查找數據行,這需要兩次B-Tree查找。

非聚簇索引#####

以myisam為例,一個數據表table中,它是有table.frm、table.myd以及table.myi組成。table.myd記錄了數據,table.myi記錄了索引的數據。在用到索引時,先到table.myi(索引樹)中進行查找,取到數據所在table.myd的行位置,拿到數據。所以myisam引擎的索引文件和數據文件是獨立分開的,則稱之為非聚簇索引。myisam類型的索引,指向數據在行的位置。即每個索引相對獨立,查詢用到索引時,索引指向數據的位置。

聚簇索引#####

以innodb為例,在一個數據table中,它的數據文件和索引文件是同一個文件。即在查詢過程中,找到了索引,便找到了數據文件。在innodb中,即存儲主鍵索引值,又存儲行數據,稱之為聚簇索引。     innodb索引,指向主鍵對數據的引用。非主鍵索引則指向對主鍵的引用。innodb中,沒有主見索引,則會使用unique索引,沒有unique索引,則會使用數據庫內部的一個行的id來當作主鍵索引。    在聚簇索引中,數據會被按照順序整理排列,當使用where進行順序、范圍、大小檢索時,會大大加速檢索效率。非聚簇索引在存儲時不會對數據進行排序,相對產生的數據文件體積也比較大。

對于InnoDB聚簇表分布#####

InnoDB使用的是聚簇索引,將主鍵組織到一棵B+樹中,而行數據就儲存在葉子節(jié)點上,若使用"where id = 14"這樣的條件查找主鍵,則按照B+樹的檢索算法即可查找到對應的葉節(jié)點,之后獲得行數據。
若對Name列進行條件搜索,則需要兩個步驟:第一步在輔助索引B+樹中檢索Name,到達其葉子節(jié)點獲取對應的主鍵。第二步使用主鍵在主索引B+樹種再執(zhí)行一次B+樹檢索操作,最終到達葉子節(jié)點即可獲取整行數據。(重點在于通過其他鍵需要建立輔助索引)

聚簇索引具有唯一性,由于聚簇索引是將數據跟索引結構放到一塊,因此一個表僅有一個聚簇索引。

表中行的物理順序和索引中行的物理順序是相同的,在創(chuàng)建任何非聚簇索引之前創(chuàng)建聚簇索引,這是因為聚簇索引改變了表中行的物理順序,數據行 按照一定的順序排列,并且自動維護這個順序;

聚簇索引默認是主鍵,如果表中沒有定義主鍵,InnoDB 會選擇一個唯一且非空的索引代替。如果沒有這樣的索引,InnoDB 會隱式定義一個主鍵(類似oracle中的RowId)來作為聚簇索引。如果已經設置了主鍵為聚簇索引又希望再單獨設置聚簇索引,必須先刪除主鍵,然后添加我們想要的聚簇索引,最后恢復設置主鍵即可。

對于MyISAM非聚簇分布#####

MyISAM使用的是非聚簇索引,非聚簇索引的兩棵B+樹看上去沒什么不同,節(jié)點的結構完全一致只是存儲的內容不同而已,主鍵索引B+樹的節(jié)點存儲了主鍵,輔助鍵索引B+樹存儲了輔助鍵。表數據存儲在獨立的地方,這兩顆B+樹的葉子節(jié)點都使用一個地址指向真正的表數據,對于表數據來說,這兩個鍵沒有任何差別。由于索引樹是獨立的,通過輔助鍵檢索無需訪問主鍵的索引樹。

使用聚簇索引的優(yōu)勢:#####

每次使用輔助索引檢索都要經過兩次B+樹查找,看上去聚簇索引的效率明顯要低于非聚簇索引,這不是多此一舉嗎?聚簇索引的優(yōu)勢在哪?

1.由于行數據和聚簇索引的葉子節(jié)點存儲在一起,同一頁中會有多條行數據,訪問同一數據頁不同行記錄時,已經把頁加載到了Buffer中(緩存器),再次訪問時,會在內存中完成訪問,不必訪問磁盤。這樣主鍵和行數據是一起被載入內存的,找到葉子節(jié)點就可以立刻將行數據返回了,如果按照主鍵Id來組織數據,獲得數據更快。

2.輔助索引的葉子節(jié)點,存儲主鍵值,而不是數據的存放地址。好處是當行數據放生變化時,索引樹的節(jié)點也需要分裂變化;或者是我們需要查找的數據,在上一次IO讀寫的緩存中沒有,需要發(fā)生一次新的IO操作時,可以避免對輔助索引的維護工作,只需要維護聚簇索引樹就好了。另一個好處是,因為輔助索引存放的是主鍵值,減少了輔助索引占用的存儲空間大小。

注:我們知道一次io讀寫,可以獲取到16K大小的資源,我們稱之為讀取到的數據區(qū)域為Page。而我們的B樹,B+樹的索引結構,葉子節(jié)點上存放好多個關鍵字(索引值)和對應的數據,都會在一次IO操作中被讀取到緩存中,所以在訪問同一個頁中的不同記錄時,會在內存里操作,而不用再次進行IO操作了。除非發(fā)生了頁的分裂,即要查詢的行數據不在上次IO操作的換村里,才會觸發(fā)新的IO操作。

3.因為MyISAM的主索引并非聚簇索引,那么他的數據的物理地址必然是凌亂的,拿到這些物理地址,按照合適的算法進行I/O讀取,于是開始不停的尋道不停的旋轉。聚簇索引則只需一次I/O。(強烈的對比)

4.不過,如果涉及到大數據量的排序、全表掃描、count之類的操作的話,還是MyISAM占優(yōu)勢些,因為索引所占空間小,這些操作是需要在內存中完成的。

聚簇索引需要注意的地方#####

當使用主鍵為聚簇索引時,主鍵最好不要使用uuid,因為uuid的值太過離散,不適合排序且可能出線新增加記錄的uuid,會插入在索引樹中間的位置,導致索引樹調整復雜度變大,消耗更多的時間和資源。

建議使用int類型的自增,方便排序并且默認會在索引樹的末尾增加主鍵值,對索引樹的結構影響最小。而且,主鍵值占用的存儲空間越大,輔助索引中保存的主鍵值也會跟著變大,占用存儲空間,也會影響到IO操作讀取到的數據量。

為什么主鍵通常建議使用自增id#####

聚簇索引的數據的物理存放順序與索引順序是一致的,即:只要索引是相鄰的,那么對應的數據一定也是相鄰地存放在磁盤上的。如果主鍵不是自增id,那么可以想 象,它會干些什么,不斷地調整數據的物理地址、分頁,當然也有其他一些措施來減少這些操作,但卻無法徹底避免。但,如果是自增的,那就簡單了,它只需要一 頁一頁地寫,索引結構相對緊湊,磁盤碎片少,效率也高。

聚簇索引的優(yōu)點#####

聚簇索引將索引和數據行保存在同一個B-Tree中,查詢通過聚簇索引可以直接獲取數據,相比非聚簇索引需要第二次查詢(非覆蓋索引的情況下)效率要高。
聚簇索引對于范圍查詢的效率很高,因為其數據是按照大小排列的,

本文標題:Mysql聚簇索引和非聚簇索引-創(chuàng)新互聯(lián)
文章網址:http://m.rwnh.cn/article2/cecoic.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站營銷、網站制作、品牌網站建設、定制網站網頁設計公司、云服務器

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網站建設
永登县| 安溪县| 浪卡子县| 吉隆县| 修文县| 吉林市| 兰坪| 安国市| 唐海县| 西乌| 西平县| 揭西县| 上犹县| 湘西| 盐山县| 新竹县| 庐江县| 陆河县| 德保县| 阿克陶县| 阿坝县| 曲沃县| 新竹县| 和田市| 龙里县| 邵武市| 逊克县| 思茅市| 东平县| 昭通市| 泸定县| 宿迁市| 江西省| 新乡县| 乌兰县| 巩义市| 大荔县| 简阳市| 鹰潭市| 五河县| 高尔夫|