1. 程式人生 > >MySQL----mysql的引擎有哪幾種,innodb Myisam 的區別?

MySQL----mysql的引擎有哪幾種,innodb Myisam 的區別?

2、mysql的引擎有哪幾種,innodb Myisam 的區別?     1) 儲存引擎主要有:     1. MyIsam ,     2. InnoDB,     3. Memory,     4. Blackhole,      5. CSV,      6. Performance_Schema,     7. Archive,      8. Federated ,      9 Mrg_Myisam

一般來說,MySQL有以下幾種引擎:MyISAM、InnoDB、ISAM、HEAP(也稱為MEMORY)、CSV、 BLACKHOLE、ARCHIVE、PERFORMANCE_SCHEMA、 Berkeley、Merge、Federated 和Cluster/NDB等,除此以外我們也可以參照MySQL++ API建立自己的資料庫引擎。      2)innodb Myisam 的區別?

InnoDB:      InnoDB是一個事務型的儲存引擎,有行級鎖定和外來鍵約束。Innodb引擎提供了對資料庫 ACID事務的支援,並且實現了SQL標準的四種隔離級別,該引擎還提供了行級鎖和外來鍵約束, 它的設計目標是處理大容量資料庫系統,它本身其實就是基於MySQL後臺的完整資料庫系統, MySQL執行時Innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是該引擎不支援FULLTEXT 型別的索引,而且它沒有儲存表的行數,當SELECT COUNT(*) FROM TABLE時需要掃描全表。 當需要使用資料庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在 併發較高時,使用Innodb引擎會提升效率。但是使用行級鎖也不是絕對的,如果在執行一個SQL 語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表。

官方講解: 1)InnoDB給MySQL提供了具有提交、回滾和崩潰恢復能力的事務安全(ACID相容)儲存引擎。 2)InnoDB鎖定在行級並且也在SELECT語句提供一個Oracle風格一致的非鎖定讀,這些特色增加了多使用者部署和效能。沒有在InnoDB中擴大鎖定的需要,因為在InnoDB中行級鎖定適合非常小的空間。 3)InnoDB也支援FOREIGN KEY強制。在SQL查詢中,你可以自由地將InnoDB型別的表與其它MySQL的表的型別混合起來,甚至在同一個查詢中也可以混合。 4)InnoDB是為處理巨大資料量時的最大效能設計,它的CPU效率可能是任何其它基於磁碟的關係資料庫引擎所不能匹敵的。 5) InnoDB被用來在眾多需要高效能的大型資料庫站點上產生。

適用場景: 1)經常更新的表,適合處理多重併發的更新請求。 2)支援事務。 3)可以從災難中恢復(通過bin-log日誌等)。 4)外來鍵約束。只有他支援外來鍵。 5)支援自動增加列屬性auto_increment。

MyIsam: 定義: MyIASM是MySQL預設的引擎,但是它沒有提供對資料庫事務的支援,也不支援行級鎖和外來鍵,因此當INSERT(插入)或UPDATE(更新)資料時即寫操作需要鎖定整個表,效率便會低一些。 MyIsam 儲存引擎獨立於作業系統,也就是可以在windows上使用,也可以比較簡單的將資料轉移到linux作業系統上去。 意味著:引擎在建立表的時候,會建立三個檔案,一個是.frm檔案用於儲存表的定義,一個是.MYD檔案用於儲存表的資料,另一個是.MYI檔案,儲存的是索引。作業系統對大檔案的操作是比較慢的,這樣將表分為三個檔案,那麼.MYD這個檔案單獨來存放資料自然可以優化資料庫的查詢等操作。有索引管理和欄位管理。MyISAM還使用一種表格鎖定的機制,來優化多個併發的讀寫操作,其代價是你需要經常執行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間。

適用場景: 1)不支援事務的設計,但是並不代表著有事務操作的專案不能用MyIsam儲存引擎,可以在service層進行根據自己的業務需求進行相應的控制。 2)不支援外來鍵的表設計。 3)查詢速度很快,如果資料庫insert和update的操作比較多的話比較適用。 4)整天 對錶進行加鎖的場景。 5)MyISAM極度強調快速讀取操作。 6)MyIASM中儲存了表的行數,於是SELECT COUNT(*) FROM TABLE時只需要直接讀取已經儲存好的值而不需要進行全表掃描。如果表的讀操作遠遠多於寫操作且不需要資料庫事務的支援,那麼MyIASM也是很好的選擇。 缺點: 就是不能在表損壞後恢復資料。(是不能主動恢復)

以下兩點必須使用 InnoDB: 1)可靠性高或者要求事務處理,則使用InnoDB。這個是必須的。 2)表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況指定InnoDB資料引擎的建立。 對比之下,MyISAM的使用場景: 1)做很多count的計算的。如一些日誌,調查的業務表。 2)插入修改不頻繁,查詢非常頻繁的。