日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL存储引擎之Myisam和Innodb总结性梳理

發(fā)布時(shí)間:2025/3/15 数据库 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL存储引擎之Myisam和Innodb总结性梳理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Mysql有兩種常用的存儲(chǔ)引擎:InnoDB與Myisam,下表是兩種引擎的簡(jiǎn)單對(duì)比

?MyISAMInnoDB



構(gòu)成上的區(qū)別:
每個(gè)MyISAM在磁盤上存儲(chǔ)成三個(gè)文件。第一個(gè) 文件的名字以表的名字開始,擴(kuò)展名指出文件類型。
.frm文件存儲(chǔ)表定義。
數(shù)據(jù)文件的擴(kuò) 展名為.MYD (MYData)。
索引文件的擴(kuò) 展名是.MYI (MYIndex)。
基于磁盤的資源是InnoDB表空間數(shù)據(jù)文件和它的日志文件,InnoDB?表的 大小只受限于操作系統(tǒng)文件的大小,一般為?2GB

事務(wù)處理上方面
:
MyISAM類型的表強(qiáng)調(diào)的是性能,其執(zhí)行數(shù) 度比InnoDB類型更快,但是不提供事務(wù)支持InnoDB提供事務(wù)支持事務(wù),外部鍵等高級(jí) 數(shù)據(jù)庫功能
? ? ? ? ? ? ? ? SELECT? UPDATE INSERT Delete








如果執(zhí)行大量的SELECT,MyISAM是更好的選擇
1.如果你的數(shù)據(jù)執(zhí)行大量的INSERTUPDATE,出于性能方面的考慮,應(yīng)該使用InnoDB表
2.DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的 刪除。
3.LOAD TABLE FROM MASTER操作對(duì)InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對(duì)于使用的額外的InnoDB特性(例如外鍵)的表不適用










對(duì)
AUTO_INCREMENT的 操作

?

?

每表一個(gè)AUTO_INCREMEN列的內(nèi)部處理。
MyISAMINSERTUPDATE操 作自動(dòng)更新這一列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂?shù)闹当粍h除之后就不 能再利用。(當(dāng)AUTO_INCREMENT列被定義為多列索引的最后一列, 可以出現(xiàn)重使用從序列頂部刪除的值的情況)。
AUTO_INCREMENT值可用ALTER TABLE或myisamch來重置

對(duì)于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但 是在MyISAM表中,可以和其他字段一起建立聯(lián) 合索引

更好和更快的auto_increment處理

如果你為一個(gè)表指定AUTO_INCREMENT列,在數(shù)據(jù)詞典里的InnoDB表句柄包含一個(gè)名為自動(dòng)增長(zhǎng)計(jì)數(shù) 器的計(jì)數(shù)器,它被用在為該列賦新值。

?

自動(dòng)增長(zhǎng)計(jì)數(shù) 器僅被存儲(chǔ)在主內(nèi)存中,而不是存在磁盤上

關(guān)于該計(jì)算器 的算法實(shí)現(xiàn),請(qǐng)參考

AUTO_INCREMENT列 在InnoDB里 如何工作



表的具體行數(shù)
select count(*) from table,MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù),注意的是,當(dāng)count(*)語句包含?where條件時(shí),兩種表的操作是一樣的InnoDB?中不 保存表的具體行數(shù),也就是說,執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來計(jì)算有多少行












表鎖
提供行鎖(locking on row level),提供與?Oracle?類型一致的不加鎖讀取(non-locking read in
SELECTs),另外,InnoDB表的行鎖也不是絕對(duì)的,如果在執(zhí) 行一個(gè)SQL語句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì)鎖全表,例如update table set num=1 where name like “%aaa%”

?

MySQL存儲(chǔ)引擎MyISAM與InnoDB如何選擇
MySQL有多種存儲(chǔ)引擎,每種存儲(chǔ)引擎有各自的優(yōu)缺點(diǎn),可以擇優(yōu)選擇使用:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
雖然MySQL里的存儲(chǔ)引擎不只是MyISAM與InnoDB這兩個(gè),但常用的就是兩個(gè)。
兩種存儲(chǔ)引擎的大致區(qū)別表現(xiàn)在:
1)InnoDB支持事務(wù),MyISAM不支持,這一點(diǎn)是非常之重要。事務(wù)是一種高級(jí)的處理方式,如在一些列增刪改中只要哪個(gè)出錯(cuò)還可以回滾還原,而MyISAM就不可以了。
2)MyISAM適合查詢以及插入為主的應(yīng)用,InnoDB適合頻繁修改以及涉及到安全性較高的應(yīng)用
3)InnoDB支持外鍵,MyISAM不支持
4)從MySQL5.5.5以后,InnoDB是默認(rèn)引擎
5)InnoDB不支持FULLTEXT類型的索引
6)InnoDB 中不保存表的行數(shù),如select count(*) from table時(shí),InnoDB需要掃描一遍整個(gè)表來計(jì)算有多少行,但是MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語句包含 where條件時(shí)MyISAM也需要掃描整個(gè)表
7)對(duì)于自增長(zhǎng)的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立聯(lián)合索引
8)清空整個(gè)表時(shí),InnoDB是一行一行的刪除,效率非常慢。MyISAM則會(huì)重建表
9)InnoDB支持行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like '%lee%'

關(guān)于MyISAM與InnoDB選擇使用:
MYISAM和INNODB是Mysql數(shù)據(jù)庫提供的兩種存儲(chǔ)引擎。兩者的優(yōu)劣可謂是各有千秋。INNODB會(huì)支持一些關(guān)系數(shù)據(jù)庫的高級(jí)功能,如事務(wù)功能和行級(jí)鎖,MYISAM不支持。MYISAM的性能更優(yōu),占用的存儲(chǔ)空間少。所以,選擇何種存儲(chǔ)引擎,視具體應(yīng)用而定:
1)如果你的應(yīng)用程序一定要使用事務(wù),毫無疑問你要選擇INNODB引擎。但要注意,INNODB的行級(jí)鎖是有條件的。在where條件沒有使用主鍵時(shí),照樣會(huì)鎖全表。比如DELETE FROM mytable這樣的刪除語句。
2)如果你的應(yīng)用程序?qū)Σ樵冃阅芤筝^高,就要使用MYISAM了。MYISAM索引和數(shù)據(jù)是分開的,而且其索引是壓縮的,可以更好地利用內(nèi)存。所以它的查詢性能明顯優(yōu)于INNODB。壓縮后的索引也能節(jié)約一些磁盤空間。MYISAM擁有全文索引的功能,這可以極大地優(yōu)化LIKE查詢的效率。

有人說MYISAM只能用于小型應(yīng)用,其實(shí)這只是一種偏見。
如果數(shù)據(jù)量比較大,這是需要通過升級(jí)架構(gòu)來解決,比如分表分庫,而不是單純地依賴存儲(chǔ)引擎。

現(xiàn)在一般都是選用innodb了,主要是myisam的全表鎖,讀寫串行問題,并發(fā)效率鎖表,效率低myisam對(duì)于讀寫密集型應(yīng)用一般是不會(huì)去選用的。

關(guān)于Mysql數(shù)據(jù)庫默認(rèn)的存儲(chǔ)引擎:
MyISAM和InnoDB是MySQL的兩種存儲(chǔ)引擎。
如果是默認(rèn)安裝,那就應(yīng)該是InnoDB,你可以在my.cnf文件中找到default-storage-engine=INNODB;
當(dāng)然你可以在建表時(shí)指定相應(yīng)的存儲(chǔ)引擎。
通過show create table xx 可以看見相應(yīng)信息。

Mysql中InnoDB和MyISAM的比較
1)MyISAM:
每個(gè)MyISAM在磁盤上存儲(chǔ)成三個(gè)文件。第一個(gè)文件的名字以表的名字開始,擴(kuò)展名指出文件類型。.frm文件存儲(chǔ)表定義。數(shù)據(jù)文件的擴(kuò)展名為.MYD (MYData)。.MYI是索引(my index)。
MyISAM表格可以被壓縮,而且它們支持全文搜索。不支持事務(wù),而且也不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。在進(jìn)行updata時(shí)進(jìn)行表鎖,并發(fā)量相對(duì)較小。如果執(zhí)行大量的SELECT,MyISAM是更好的選擇。
MyISAM的索引和數(shù)據(jù)是分開的,并且索引是有壓縮的,內(nèi)存使用率就對(duì)應(yīng)提高了不少。能加載更多索引,而Innodb是索引和數(shù)據(jù)是緊密捆綁的,沒有使用壓縮從而會(huì)造成Innodb比MyISAM體積龐大不小
MyISAM緩存在內(nèi)存的是索引,不是數(shù)據(jù)。而InnoDB緩存在內(nèi)存的是數(shù)據(jù),相對(duì)來說,服務(wù)器內(nèi)存越大,InnoDB發(fā)揮的優(yōu)勢(shì)越大。

優(yōu)點(diǎn):查詢數(shù)據(jù)相對(duì)較快,適合大量的select,可以全文索引。
缺點(diǎn):不支持事務(wù),不支持外鍵,并發(fā)量較小,不適合大量update

2)InnoDB:(參數(shù)說明:Mysql存儲(chǔ)引擎之Innodb重要參數(shù)說明
這 種類型是事務(wù)安全的。.它與BDB類型具有相同的特性,它們還支持外鍵。InnoDB表格速度很快。具有比BDB還豐富的特性,因此如果需要一個(gè)事務(wù)安全 的存儲(chǔ)引擎,建議使用它。在update時(shí)表進(jìn)行行鎖,并發(fā)量相對(duì)較大。如果你的數(shù)據(jù)執(zhí)行大量的INSERT或UPDATE,出于性能方面的考慮,應(yīng)該使 用InnoDB表。
優(yōu)點(diǎn):支持事務(wù),支持外鍵,并發(fā)量較大,適合大量update
缺點(diǎn):查詢數(shù)據(jù)相對(duì)較快,不適合大量的select
對(duì) 于支持事物的InnoDB類型的表,影響速度的主要原因是AUTOCOMMIT默認(rèn)設(shè)置是打開的,而且程序沒有顯式調(diào)用BEGIN 開始事務(wù),導(dǎo)致每插入一條都自動(dòng)Commit,嚴(yán)重影響了速度。可以在執(zhí)行sql前調(diào)用begin,多條sql形成一個(gè)事物(即使autocommit打 開也可以),將大大提高性能。

基本的差別為:
MyISAM類型不支持事務(wù)處理等高級(jí)處理,而InnoDB類型支持。
MyISAM類型的表強(qiáng)調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類型更快,但是不提供事務(wù)支持,而InnoDB提供事務(wù)支持已經(jīng)外部鍵等高級(jí)數(shù)據(jù)庫功能。

?

1.? 關(guān)于引擎的查詢使用如下:

看你的mysql現(xiàn)在已提供什么存儲(chǔ)引擎: mysql> show engines;

?

看你的mysql當(dāng)前默認(rèn)的存儲(chǔ)引擎: mysql> show variables like '%storage_engine%';

?

你要看某個(gè)表用了什么引擎(在顯示結(jié)果里參數(shù)engine后面的就表示該表當(dāng)前用的存儲(chǔ)引擎): mysql> show create table 表名;

?

如何查看Mysql服務(wù)器上的版本

?

額 系統(tǒng)函數(shù)啊 select version(); 或者 SHOW VARIABLES LIKE '%version%';

?

2、設(shè)置InnoDB為默認(rèn)引擎:(類似于修改全局變量) 在配置文件my.cnf中的 [mysqld] 下面加入 default-storage-engine=INNODB 一句

?

轉(zhuǎn)載于:https://www.cnblogs.com/qlqwjy/p/7965460.html

總結(jié)

以上是生活随笔為你收集整理的MySQL存储引擎之Myisam和Innodb总结性梳理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。