一农猬、數(shù)據(jù)庫引擎
數(shù)據(jù)庫存儲引擎是數(shù)據(jù)庫低層軟件組織,數(shù)據(jù)庫管理系統(tǒng)使用數(shù)據(jù)引擎進行創(chuàng)建售淡、查詢斤葱、更新和刪除數(shù)據(jù)。不同的存儲引擎提供不同的存儲機制揖闸、索引技巧揍堕、鎖定水平等功能,使用不同的存儲引擎汤纸,還可以獲得特定的功能衩茸。Mysql的核心就是存儲引擎
在MYSQL中,不需要在整個服務(wù)器中使用同一種存儲引擎贮泞,針對具體的要求楞慈,可以對每一個表使用不同的存儲引擎幔烛。
二、一些引擎的區(qū)別
InnoDB
是事務(wù)性數(shù)據(jù)庫的首選引擎囊蓝,支持事務(wù)安全表(ACID),支持行鎖定和外鍵約束饿悬,InnoDB是默認的引擎。其主要特性有:
1慎颗、innodb給MySQL提供了具有提交乡恕、回滾和崩潰恢復(fù)能力的事物安全(ACID兼容)存儲引擎。InnoDB鎖定在行級并且也在SELECT語句中提供一個類似于Oracle的非鎖定讀俯萎。這些功能增加了多用戶部署和性能傲宜。在SQL查詢中,可以自由地將InnoDB類型的表和其他MySql的表類型混合起來夫啊,甚至在同一個查詢中也可以混合函卒。
2、InnoDB是為處理巨大數(shù)據(jù)量的最大性能設(shè)計撇眯。它的cpu效率可能是任何其他基于磁盤的關(guān)系型數(shù)據(jù)庫引擎所不能匹敵的
3报嵌、InnoDB存儲引擎完全與MYSQL服務(wù)器整合,InnoDB存儲引擎為在主內(nèi)中緩存數(shù)據(jù)和索引而維持它自己的緩沖池熊榛。InnoDB將它的表和索引在一個邏輯表空間中锚国,表空間可以包含數(shù)個文件。這與MyISAM表不同玄坦,比如在MYISAM表中每個表被存放在分離的文件中血筑。InnoDB表可以是任何尺寸,即使在文件尺寸被限制在2GB的操作系統(tǒng)上煎楣。
4豺总、InnoDB支持外鍵完整性約束,存儲表中的數(shù)據(jù)時择懂,每張表的存儲都按主鍵順序存放喻喳,如果沒有顯示在表定義時指定主鍵,InnoDB會為每一個行生成一個5字節(jié)的ROWID困曙,并以此作為主鍵
5表伦、InnoDB被用來在眾多需要高性能的大型數(shù)據(jù)庫站點上。InnoDB不創(chuàng)建目錄赂弓,使用InnoDB時绑榴,MySQL將在MYSQL數(shù)據(jù)目錄創(chuàng)建一個名為ibdata1的10MB大小的自動擴展數(shù)據(jù)文件,以及兩個名為lib_logfile和lib_logfile1的5MB大小的日志文件
MyISAM
基于ISAM存儲引擎盈魁,并對其進行拓展翔怎。它是在WEB、數(shù)據(jù)存儲和其他應(yīng)用環(huán)境才最常用的存儲引擎之一
MyISAM擁有較高的插入、查詢速度赤套,但不支持事務(wù)飘痛,主要特性有:
1、大文件在支持大文件的文件系統(tǒng)和操作系統(tǒng)上被支持
2容握、當(dāng)被刪除和更新及插入操作混合使用的時候宣脉,動態(tài)尺寸的行產(chǎn)生更少的碎片。這要通過合并相領(lǐng)被刪除的快剔氏,以及若下一個快被刪除塑猖,就擴展到下一塊自動完成。
3谈跛、每個MyISAM表最大索引數(shù)是64羊苟,這可以通過重新編譯來改變。每個索引最大的列數(shù)是16
4感憾、最大的鍵長度是1000字節(jié)蜡励,這也可以通過編譯倆改變
5、BLOB和TEXT列可以被索引
6阻桅、NULL被允許在索引的列中凉倚,這個值占每個鍵的0-1字節(jié)
7、所有數(shù)字鍵值以高字節(jié)優(yōu)先被存儲以允許一個更高的索引壓縮
8嫂沉、每個MyISAM類型的表都有一個AUTO_INCREMENT的內(nèi)部列稽寒,當(dāng)INSERT和UPDATE操作的時候該列被更新,同時AUTO_INCREMENT列將被刷新趟章。所以說瓦胎,MyISAM類型表的AUTO_INCREMENT列更新比InnoDB類型的AUTO_INCREMENT更快
9、可以把數(shù)據(jù)文件和索引文件放在不同目錄
10尤揣、每個字符列可以有不同的字符集
11、有VARCHAR的表可以固定或動態(tài)記錄長度
12柬祠、VARCHAR和CHAR列可以多達64KB
MEMORY存儲引擎
MEMORY存儲引擎將表中的數(shù)據(jù)存儲到內(nèi)存中北戏,為查詢和引用其他表數(shù)據(jù)提供快速訪問。MEMORY主要特性有:
1漫蛔、MEMORY表的每個表可以有多達32個索引嗜愈,每個索引16列,以及500字節(jié)的最大鍵長度
2莽龟、MEMORY存儲引擎執(zhí)行HASH和BTREE縮影
3蠕嫁、可以在一個MEMORY表中有非唯一鍵值
4、MEMORY表使用一個固定的記錄長度格式
5毯盈、MEMORY不支持BLOB或TEXT列
6剃毒、MEMORY支持AUTO_INCREMENT列和對可包含NULL值的列的索引
7、MEMORY表在所由客戶端之間共享(就像其他任何非TEMPORARY表)
8、MEMORY表內(nèi)存被存儲在內(nèi)存中赘阀,內(nèi)存是MEMORY表和服務(wù)器在查詢處理時的空閑中益缠,創(chuàng)建的內(nèi)部表共享
9、當(dāng)不再需要MEMORY表的內(nèi)容時基公,要釋放被MEMORY表使用的內(nèi)存幅慌,應(yīng)該執(zhí)行DELETE FROM或TRUNCATE TABLE,或者刪除整個表(使用DROP TABLE)
ARCHIVE
Archive是歸檔的意思轰豆,在歸檔之后很多的高級功能就不再支持了胰伍,僅僅支持最基本的插入和查詢兩種功能。在MySQL 5.5版以前酸休,Archive是不支持索引骂租,但是在MySQL 5.5以后的版本中就開始支持索引了。Archive擁有很好的壓縮機制雨席,它使用zlib壓縮庫菩咨,在記錄被請求時會實時壓縮,所以它經(jīng)常被用來當(dāng)做倉庫使用陡厘。
三抽米、如何選擇合適的存儲引擎
InnoDB:支持事務(wù),數(shù)據(jù)緩存(表和索引在一個邏輯空間中)糙置,外鍵約束支持云茸,巨大數(shù)據(jù)量的最大性能設(shè)計(64TB),行級鎖定
MyISAM:主要用來插入和查詢記錄谤饭,處理效率較高标捺,表級鎖定
Memory:臨時存儲數(shù)據(jù)量不大的數(shù)據(jù),臨時表
Archive:如果只有INSERT和SELECT操作揉抵,選擇此引擎亡容,支持高并發(fā)的插入操作,zlib壓縮機制冤今,當(dāng)倉庫使用
提供幾個選擇標準闺兢,然后按照標準,選擇對應(yīng)的存儲引擎即可戏罢,也可以根據(jù)[常用引擎對比]來選擇你使用的存儲引擎野蝇。使用哪種引擎需要根據(jù)需求靈活選擇助隧,一個數(shù)據(jù)庫中多個表可以使用不同的引擎以滿足各種性能和實際需求。使用合適的存儲引擎,將會提高整個數(shù)據(jù)庫的性能藕帜。
●是否需要支持事務(wù)图谷;
●是否需要使用熱備主之;
●崩潰恢復(fù)酵幕,能否接受崩潰衬以;
●是否需要外鍵支持;
●存儲的限制扶踊;
●對索引和緩存的支持泄鹏;
●如果要提供提交、回滾秧耗、崩潰恢復(fù)能力的事物安全(ACID兼容)能力备籽,并要求實現(xiàn)并發(fā)控制,InnoDB是一個好的選擇
●如果數(shù)據(jù)表主要用來插入和查詢記錄分井,則MyISAM引擎能提供較高的處理效率
●如果只是臨時存放數(shù)據(jù)车猬,數(shù)據(jù)量不大,并且不需要較高的數(shù)據(jù)安全性尺锚,可以選擇將數(shù)據(jù)保存在內(nèi)存中的Memory引擎珠闰,MySQL中使用該引擎作為臨時表,存放查詢的中間結(jié)果
●如果只有INSERT和SELECT操作瘫辩,可以選擇Archive伏嗜,Archive支持高并發(fā)的插入操作,但是本身不是事務(wù)安全的伐厌。Archive非常適合存儲歸檔數(shù)據(jù)承绸,如記錄日志信息可以使用Archive
使用哪一種引擎需要靈活選擇,一個數(shù)據(jù)庫中多個表可以使用不同引擎以滿足各種性能和實際需求挣轨,使用合適的存儲引擎军熏,將會提高整個數(shù)據(jù)庫的性能