小貝_mysql 常見儲存引擎區別,小貝_mysql儲存引擎
儲存引擎區別簡要:
1、儲存引擎
2、myisam與innodb區別
一、儲存引擎
1、什麼是儲存引擎
通俗地講就是儲存和管理資料的方式
形象例子:
某處地方的單車管理員:李某,張某。每天都有很多人來存取單車。李某的管理方式是: 車主自行存放,李某也不記錄對方存的是什麼車。取車時則要交管理費。也不檢查取的是否是對方自己的車。相反,張某,則在車主存放車時,記錄存放人的特徵以及對應車的資訊。當人來取車時,張某還要小心核對,人與車的特徵是否對應。
從上述例子可知:
a、從效率的角度來看: 李某比張某快,因為其不用進行校對
b、從安全性的角度來看: 張某比李某要安全,因為其進行了校對。
總結: 實際上,mysql的儲存引擎也是這樣工作,每種儲存引擎都有自身的存取方式,因此在選擇上,應該根據實際情況來定。
2、查看mysql所有引擎
mysql>show engines;
二、Myisam與Innodb的區別
之所以要區分這兩種儲存引擎,是因為它們是目前使用最頻繁的mysql引擎,因此有必要對它們進行區分。有利於在實際情況下進行靈活運用。
1、myisam儲存引擎
a、表構成
建立表mytest
create table mytest(id int unsigned,content char(5))engine=myisam;
表對應磁碟的檔案
總結:
a1、尾碼名為:frm為表結構檔案,MYD為資料檔案,MYI為索引檔案
a2、建立myisam引擎的表,都會建立這三個檔案,在進行mysqlDatabase Backup或轉移時,方便操作
b、批量插入資料
插入1000行資料
c、查詢表的條數
總結: 從可以看到mysiam有對錶的行數進行記錄,而不是需要一條條去記錄
d、是否支援事務
總結: myisam不支援事務,因此如果你在資料庫進行事務操作,但是事務無法成功,你就要看你的表引擎了,看這種引擎是否支援事務。
e、對auto_increment列的操作(修改表mytest的id列)
插入資料
刪除id為3的資料,然後在插入資料
這時發現,刪除id為3後,繼續添加的資料,id並不是從3開始,而是跳過3,從4開始算起。
處理方案:
刪除資料後,重設auto_increment
總結: myisam引擎的表會對錶中auto_increment進行存放,存放在檔案磁碟上。即使是重啟服務,也不會丟失。
2、innodb儲存引擎
a、表結構
建立表myinnodb表
create table myinnodb(id int unsigned,content char(5))engine=innodb;
其中,frm為表結構檔案,ibd為資料和索引檔案
b、批量插入資料 (插入1000行資料)
c、查詢表總條數
總結: innodb引擎的表,在計算總行數時,是一條條算
d、是否支援事務
總結: innodb引擎表支援事務操作
e、對auto_increment列的操作(修改表myinnodb的id列)
插入資料
刪除id為3的資料
繼續插入資料
發現這種情況跟myisam引擎的一致。
處理方案:
總結: innodb可以對auto_increment進行重設,但其對auto_increnment列僅被儲存在主記憶體中,而不是存在磁碟上
重啟服務
3、myisam與innodb的區別
|
myisam |
innodb |
檔案構成 |
frm、MYD、MYI |
frm、ibd |
是否支援事務 |
MyISAM類型的表強調的是效能,其執行數度比InnoDB類型更快,但是不提供事務支援 |
InnoDB提供事務支援事務,外部鍵等進階資料庫功能 |
計算表行數 |
select count(*) from table,MyISAM只要簡單的讀出儲存好的行數,注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的 |
InnoDB 中不儲存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行 |
鎖的粒度 |
表鎖 |
行鎖 |
對AUTO_INCREMENT的操作 |
存放在磁碟上,可以通過alter進行重設 |
僅被儲存在主記憶體中,而不是存在磁碟上 |
4、表鎖與行鎖的區別
在執行資料庫寫入的操作(insert,update,delete)的時候,mysiam表會鎖表,而innodb表會鎖行。通俗點說,就是你執行了一個update語句,那麼mysiam表會將整個表都鎖住,其他的insert和delete、update都會被拒之門外,等到這個update語句執行完成後才會被依次執行。
而鎖行,就是說,你執行update語句是,只會將這一條記錄進行鎖定,只有針對這條記錄的其他寫入、更新操作會被阻塞並等待這條update語句執行完畢後再執行,針對其他記錄的寫入操作不會有影響。
5、myisam與innodb的選擇
a、業務需要支援事務,選擇innodb
b、業務查詢居多,選擇myisam
6、總結
MyISAM管理非事務表。它提供高速儲存和檢索,以及全文檢索搜尋能力。如果應用中需要執行大量的SELECT查詢,那麼MyISAM是更好的選擇。
InnoDB用於交易處理應用程式,具有眾多特性,包括ACID事務支援。如果應用中需要執行大量的INSERT或UPDATE操作,則應該使用InnoDB,這樣可以提高多使用者並行作業的效能。
補充:
1、對於innodb的資料結構,首先要先理解兩個概念性的問題:共用資料表空間以及獨佔資料表空間。
什麼是共用資料表空間和獨佔資料表空間
共用資料表空間以及獨佔資料表空間都是針對資料的儲存方式而言的。
共用資料表空間: 某一個資料庫的所有表資料,索引檔案全部放在一個檔案中,預設這個共用資料表空間的檔案路徑在data目錄下。預設的檔案名稱為:ibdata1初始化為10M。
獨佔資料表空間: 每一張表都將會產生以獨立的檔案方式來進行儲存,每一張表都有一個.frm表描述檔案,還有一個.ibd檔案。其中這個檔案包括了單獨一個表的資料內容以及索引內容,預設情況下它的儲存位置也是在表的位置之中。
The quieter you become,the more you are able to hear!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。