真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

怎么樣區(qū)別存儲引擎myIsam和innodb

下文主要給大家?guī)碓趺礃訁^(qū)別存儲引擎myIsam和innodb,希望這些文字能夠帶給大家實際用處,這也是我編輯這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。

公司主營業(yè)務:做網站、網站建設、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現互聯網宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯推出瀍河免費做網站回饋大家。

MySQL有多種存儲引擎,MyISAM和InnoDB是其中常用的兩種。這里介紹關于這兩種引擎的一些基本概念(非深入介紹)。

MyISAM是MySQL的默認存儲引擎,基于傳統的ISAM類型,支持全文搜索,但不是事務安全的,而且不支持外鍵。每張MyISAM表存放在三個文件中:frm 文件存放表格定義;數據文件是MYD (MYData);索引文件是MYI (MYIndex)。

InnoDB是事務型引擎,支持回滾、崩潰恢復能力、多版本并發(fā)控制、ACID事務,支持行級鎖定(InnoDB表的行鎖不是絕對的,如果在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,如like操作時的SQL語句),以及提供與Oracle類型一致的不加鎖讀取方式。InnoDB存儲它的表和索引在一個表空間中,表空間可以包含數個文件。

怎么樣區(qū)別存儲引擎myIsam和innodb

核心區(qū)別

MyISAM是非事務安全型的,而InnoDB是事務安全型的。

MyISAM鎖的粒度是表級,而InnoDB支持行級鎖定。

MyISAM支持全文類型索引,而InnoDB不支持全文索引。

MyISAM相對簡單,所以在效率上要優(yōu)于InnoDB,小型應用可以考慮使用MyISAM。

MyISAM表是保存成文件的形式,在跨平臺的數據轉移中使用MyISAM存儲會省去不少的麻煩。

InnoDB表比MyISAM表更安全,可以在保證數據不會丟失的情況下,切換非事務表到事務表(alter table tablename type=innodb)。

應用場景

MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。如果應用中需要執(zhí)行大量的SELECT查詢,那么MyISAM是更好的選擇。

InnoDB用于事務處理應用程序,具有眾多特性,包括ACID事務支持。如果應用中需要執(zhí)行大量的INSERT或UPDATE操作,則應該使用InnoDB,這樣可以提高多用戶并發(fā)操作的性能。

Mysql的存儲引擎和索引

數據庫必須有索引,沒有索引則檢索過程變成了順序查找,O(n)的時間復雜度幾乎是不能忍受的。我們非常容易想象出一個只有單關鍵字組成的表如何使用B+樹進行索引,只要將關鍵字存儲到樹的節(jié)點即可。當數據庫一條記錄里包含多個字段時,一棵B+樹就只能存儲主鍵,如果檢索的是非主鍵字段,則主鍵索引失去作用,又變成順序查找了。這時應該在第二個要檢索的列上建立第二套索引。 這個索引由獨立的B+樹來組織。有兩種常見的方法可以解決多個B+樹訪問同一套表數據的問題,一種叫做聚簇索引(clustered index ),一種叫做非聚簇索引(secondary index)。這兩個名字雖然都叫做索引,但這并不是一種單獨的索引類型,而是一種數據存儲方式。對于聚簇索引存儲來說,行數據和主鍵B+樹存儲在一起,輔助鍵B+樹只存儲輔助鍵和主鍵,主鍵和非主鍵B+樹幾乎是兩種類型的樹。對于非聚簇索引存儲來說,主鍵B+樹在葉子節(jié)點存儲指向真正數據行的指針,而非主鍵。

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

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

為了更形象說明這兩種索引的區(qū)別,我們假想一個表如下圖存儲了4行數據。其中Id作為主索引,Name作為輔助索引。圖示清晰的顯示了聚簇索引和非聚簇索引的差異。

怎么樣區(qū)別存儲引擎myIsam和innodb

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

1 由于行數據和葉子節(jié)點存儲在一起,這樣主鍵和行數據是一起被載入內存的,找到葉子節(jié)點就可以立刻將行數據返回了,如果按照主鍵Id來組織數據,獲得數據更快。

2 輔助索引使用主鍵作為"指針" 而不是使用地址值作為指針的好處是,減少了當出現行移動或者數據頁分裂時輔助索引的維護工作,使用主鍵值當作指針會讓輔助索引占用更多的空間,換來的好處是InnoDB在移動行時無須更新輔助索引中的這個"指針"。也就是說行的位置(實現中通過16K的Page來定位,后面會涉及)會隨著數據庫里數據的修改而發(fā)生變化(前面的B+樹節(jié)點分裂以及Page的分裂),使用聚簇索引就可以保證不管這個主鍵B+樹的節(jié)點如何變化,輔助索引樹都不受影響。

所以在百萬級數據及更大數據情況下,mysql innoDB 的索引表現更加優(yōu)秀!

對于以上關于怎么樣區(qū)別存儲引擎myIsam和innodb,大家是不是覺得非常有幫助。如果需要了解更多內容,請繼續(xù)關注我們的行業(yè)資訊,相信你會喜歡上這些內容的。


本文題目:怎么樣區(qū)別存儲引擎myIsam和innodb
標題URL:http://weahome.cn/article/jphpdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部