# 前言 從今天開始, 就帶各位小伙伴學習資料庫技術。**資料庫技術是Java開發中必不可少的一部分知識內容。也是非常重要的技術。本系列教程由淺入深, 全面講解資料庫體系。 非常適合零基礎的小伙伴來學習。** *** 全文大約【**1567】** 字,不說廢話,只講可以讓你學到技術、明白原理的純乾貨 ...
前言
從今天開始, 就帶各位小伙伴學習資料庫技術。資料庫技術是Java開發中必不可少的一部分知識內容。也是非常重要的技術。本系列教程由淺入深, 全面講解資料庫體系。 非常適合零基礎的小伙伴來學習。
全文大約【1567】 字,不說廢話,只講可以讓你學到技術、明白原理的純乾貨!本文帶有豐富案例及配圖視頻,讓你更好的理解和運用文中的技術概念,並可以給你帶來具有足夠啟迪的思考......
一. 存儲引擎介紹
1. 什麼是存儲引擎
資料庫最核心的一點就是用來存儲數據,數據存儲就避免不了和磁碟打交道。那麼數據以哪種方式進行存儲,如何存儲是存儲的關鍵所在。所以存儲引擎就相當於是數據存儲的發動機,來驅動數據在磁碟層面進行存儲。不同的存儲引擎功能差別很大。各位小伙伴不要著急,下麵我們逐一道來。
查看存儲引擎:
SHOW ENGINES;
2. InnoDB存儲引擎
特點:
- InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。相比較MyISAM存儲引擎,InnoDB寫的處理效率差一點並且會占用更多的磁碟空間保留數據和索引。
- 提供了對資料庫事務ACID(原子性Atomicity、一致性Consistency、隔離性Isolation、持久性Durability)的支持,實現了SQL標準的四種隔離級別。
- 設計目標就是處理大容量的資料庫系統,MySQL運行時InnoDB會在記憶體中建立緩衝池,用於緩衝數據和索引。
- 執行“select count(*) from table”語句時需要掃描全表,因為使用innodb引擎的表不會保存表的具體行數,所以需要掃描整個表才能計算多少行。
- InnoDB引擎是行鎖,粒度更小,所以寫操作不會鎖定全表,在併發較高時,使用InnoDB會提升效率。即存在大量UPDATE/INSERT操作時,效率較高。
- InnoDB清空數據量大的表時,是非常緩慢,這是因為InnoDB必須處理表中的每一行,根據InnoDB的事務設計原則,首先需要把“刪除動作”寫入“事務日誌”,然後寫入實際的表。所以,清空大表的時候,最好直接drop table然後重建。即InnoDB一行一行刪除,不會重建表。
使用場景:
- 經常UPDETE/INSERT的表,使用處理多併發的寫請求。
- 支持事務,必選InnoDB。
- 可以從災難中恢復(日誌+事務回滾)。
- 外鍵約束、列屬性AUTO_INCREMENT支持。
3. MyISAM存儲引擎
特點:
- MyISAM不支持事務,不支持外鍵,SELECT/INSERT為主的應用可以使用該引擎。
- 每個MyISAM在存儲成3個文件,擴展名分別是:
-
- frm:存儲表定義(表結構等信息)。
- MYD(MYData),存儲數據。
- MYI(MYIndex),存儲索引。
- 不同MyISAM表的索引文件和數據文件可以放置到不同的路徑下。
- MyISAM類型的表提供修複的工具,可以用CHECK TABLE語句來檢查MyISAM表健康,並用REPAIR TABLE語句修複一個損壞的MyISAM表。
- 在MySQL5.6以前,只有MyISAM支持Full-text全文索引。
使用場景:
- 經常SELECT/INSERT的表,插入不頻繁,查詢非常頻繁。
- 不支持事務。
- 做很多count 的計算。
4. MyISAM和Innodb區別
下麵給各位小伙伴梳理下,敲黑板啦,重點來啦。
InnoDB和MyISAM是許多人在使用MySQL時最常用的兩個存儲引擎,這兩個存儲引擎各有優劣,視具體應用而定。基本的差別為:MyISAM類型不支持事務處理,而InnoDB類型支持。MyISAM類型強調的是性能,其執行速度比InnoDB類型更快,而InnoDB提供事務支持已經外部鍵等高級資料庫功能。
具體實現的差別:
- MyISAM是非事務安全型的,而InnoDB是事務安全型的。
- MyISAM鎖的粒度是表級,而InnoDB支持行級鎖定。
- MyISAM不支持外鍵,而InnoDB支持外鍵。
- MyISAM相對簡單,所以在效率上要優於InnoDB,小型應用可以考慮使用MyISAM。
- InnoDB表比MyISAM表更安全。
二. 結語
最後在這裡對本文核心要點進行總結:
- MySQL最常用的存儲引擎就是InnoDB和MyISAM這兩個引擎,所以需要各位小伙伴熟記。
- 預設的存儲引擎是InnoDB支持事務、主外鍵關係。
三. 配套視頻
如果你不習慣閱讀技術文章,或是對文中的技術概念不能很好地理解,可以來看看篩選出的視頻教程。與本文配套的Java學習視頻,鏈接如下