一生熱愛在mysql5.5之前,預設使用的是myisam引擎,5.5之後,預設使用innodb引擎。關於二者區別一直是重要的問題,選擇合適的資料庫引擎對於開發的幫助是巨大的。回頭太難。
myisam不支援事務,因此在開發中需要使用事務的優先選擇innodb,況且在需求越來越複雜的時代,事務按理說是必不可少的。
先說一下2個概念
索引中索引的邏輯順序與磁碟上行的物理儲存順序不同。
資料庫錶行中資料的物理順序與鍵值的邏輯(索引)順序相同。乙個表只能有乙個聚集索引,因為乙個表的物理順序只有一種情況,所以,對應的聚集索引只能有乙個。如果某索引不是聚集索引,則表中的行物理順序與索引順序不匹配,與非聚集索引相比,聚集索引有著更快的檢索速度。
概念有點抽象,我們結合實際理解一下。眾所周知,myisam和innodb使用的資料結構都是b+樹。
myisam使用的是非聚集索引,也就是樹節點儲存的是資料的指標(位址),當查詢資料的時候,首先找到樹節點相對應的指標,再根據指標去資料實際儲存的位置查詢真正的資料。(索引檔案和資料檔案是分離的)。
innodb使用的是聚集索引,也就是樹節點實際儲存的就是真實的資料,當查詢資料的時候,查詢到相對應的葉子結點對應的資料就結束了。(葉節點包含了完整的資料記錄)。
二者有點類似於物件訪問方式的控制代碼訪問和直接指標訪問。
毫無疑問,innodb的查詢效率比mysima高很多。
這裡的innodb的聚集索引有些需要注意的地方需要說明一下。
在使用innodb索引的時候,innodb預設在主鍵建立索引。推薦使用整形自增主鍵,沒有主鍵的話資料庫底層則尋找不重複的一列建立索引,如果沒有不重複的一列,那資料庫底層則自動生成唯一列維護索引。
如果是非主鍵索引,結構葉子節點儲存的就是主鍵值了,再根據主鍵值尋找資料,保證資料一致性和節約儲存空間。
myisam使用的是表鎖,不支援高併發。
innodb使用的是行鎖,支援高併發。
myisam不支援外來鍵。
innodb支援外來鍵。
myizam支援全文索引。
innodb不支援全文索引。不過可以通過中介軟體實現,比如solr,elasticsearch.
資料庫引擎 InnoDB和MyISAM
innodb是mysql預設的儲存引擎 通過命令列 mysql show engine可以檢視mysql支援的引擎。在mac下 mysql安裝在 usr local mysql 啟動sql usr local mysql 5.6.40 macos10 13 x86 64 bin mysql u ro...
關於MySql 資料庫InnoDB儲存引擎介紹
熟悉mysql的人,都知道innodb儲存引擎,如大家所知,redo log是innodb的核心事務日誌之一,innodb寫入redo log後就會提交事務,而非寫入到datafile。之後innodb再非同步地將新事務的資料非同步地寫入datafile,真正儲存起來。那麼innodb引擎有了red...
關於Mysql的儲存引擎Innodb和Myisam
myisam和innodb 都是採用 b tree這種資料結構來實現 b tree索引。而很大的區別在於,innodb 儲存引擎採用 聚集索引 的資料儲存方式實現b tree索引,所謂 聚集 就是指資料行和相鄰的鍵值緊湊地儲存在一起,注意 innodb 只能聚集乙個葉子頁 16k 的記錄 即聚集索引...