一、查看存儲引擎
show engines;
二、設(shè)置系統(tǒng)默認(rèn)的存儲引擎
<1> 查看默認(rèn)的存儲引擎
show variables like '%storage_engine%';
#或
SELECT @@default_storage_engine;
<2> 修改默認(rèn)的存儲引擎
1. 命令方式
SET DEFAULT_STORAGE_ENGINE=MyISAM;
2. 配置文件方式
修改配置文件my.cnf
default-storage-engine=MyISAM
重啟服務(wù)
systemctl restart mysqld.service
三、設(shè)置表的存儲引擎
??存儲引擎是負(fù)責(zé)對表中的數(shù)據(jù)進(jìn)行提取和寫入工作的,我們可以為不同的表設(shè)置不同的存儲引擎 ,也就是說不同的表可以有不同的物理存儲結(jié)構(gòu),不同的提取和寫入方式。
<1> 創(chuàng)建表時指定存儲引擎
CREATE TABLE 表名(
建表語句;
) ENGINE = 存儲引擎名稱;
<2> 修改表的存儲引擎
ALTER TABLE 表名 ENGINE = 存儲引擎名稱;
四、引擎介紹
<1> InnoDB
- MySQL從3.23.34a開始就包含InnoDB存儲引擎。大于等于5.5之后,默認(rèn)采用InnoDB引擎 。
- InnoDB是MySQL的默認(rèn)事務(wù)型引擎 ,它被設(shè)計用來處理大量的短期(short-lived)事務(wù)。可以確保事務(wù)的完整提交(Commit)和回滾(Rollback)。
- 除了增加和查詢外,還需要更新、刪除操作,那么,應(yīng)優(yōu)先選擇InnoDB存儲引擎。除非有非常特別的原因需要使用其他的存儲引擎,否則應(yīng)該優(yōu)先考慮InnoDB引擎。
- 數(shù)據(jù)文件結(jié)構(gòu):
表名.frm 存儲表結(jié)構(gòu)(MySQL8.0時,合并在表名.ibd中)
表名.ibd 存儲數(shù)據(jù)和索引 - InnoDB是 為處理巨大數(shù)據(jù)量的最大性能設(shè)計 。在以前的版本中,字典數(shù)據(jù)以元數(shù)據(jù)文件、非事務(wù)表等來存儲?,F(xiàn)在這些元數(shù)據(jù)文件被刪除了。比如:.frm ,.par ,.trn ,.isl ,.db.opt 等都在MySQL8.0中不存在了。
- 對比MyISAM的存儲引擎, InnoDB寫的處理效率差一些 ,并且會占用更多的磁盤空間以保存數(shù)據(jù)和索引。MyISAM只緩存索引,不緩存真實數(shù)據(jù);InnoDB不僅緩存索引還要緩存真實數(shù)據(jù), 對內(nèi)存要求較高 ,而且內(nèi)存大小對性能有決定性的影響。
<2> MyISAM
- MyISAM提供了大量的特性,包括全文索引、壓縮、空間函數(shù)(GIS)等,但MyISAM 不支持事務(wù)、行級鎖、外鍵 ,有一個毫無疑問的缺陷就是 崩潰后無法安全恢復(fù) 。
- 5.5之前默認(rèn)的存儲引擎
- 優(yōu)勢是訪問的 速度快 ,對事務(wù)完整性沒有要求或者以SELECT、INSERT為主的應(yīng)用
- 針對數(shù)據(jù)統(tǒng)計有額外的常數(shù)存儲。故而 count(*) 的查詢效率很高
- 數(shù)據(jù)文件結(jié)構(gòu):
表名.frm 存儲表結(jié)構(gòu)
表名.MYD 存儲數(shù)據(jù) (MYData)
表名.MYI 存儲索引 (MYIndex) - 應(yīng)用場景:只讀應(yīng)用或者以讀為主的業(yè)務(wù)
<3> CSV
??存儲數(shù)據(jù)時,以逗號分隔各個數(shù)據(jù)項。創(chuàng)建CSV表還會創(chuàng)建相應(yīng)的 元文件 ,用于 存儲表的狀態(tài) 和 表中存在的行數(shù) 。此文件的名稱與表的名稱相 同,后綴為 CSM。
<4> Memory
??Memory采用的邏輯介質(zhì)是內(nèi)存,響應(yīng)速度很快 ,但是當(dāng)mysqld守護(hù)進(jìn)程崩潰的時候 數(shù)據(jù)會丟失 。另外,要求存儲的數(shù)據(jù)是數(shù)據(jù)長度不變的格式,比如Blob和Text類型的數(shù)據(jù)不可用(長度不固定的)。
1. 特點(diǎn)
- Memory同時 支持哈希(HASH)索引 和 B+樹索引 。
- Memory表至少比MyISAM表要 快一個數(shù)量級 。
- MEMORY 表的大小是受到限制 的。表的大小主要取決于兩個參數(shù),分別是 max_rows 和
- max_heap_table_size 。其中,max_rows可以在創(chuàng)建表時指定;max_heap_table_size的大小默認(rèn)為16MB,可以按需要進(jìn)行擴(kuò)大。
- 數(shù)據(jù)文件與索引文件分開存儲。
- 缺點(diǎn):其數(shù)據(jù)易丟失,生命周期短?;谶@個缺陷,選擇MEMORY存儲引擎時需要特別小心。
2. 使用場景
- 目標(biāo)數(shù)據(jù)比較小 ,而且非常 頻繁的進(jìn)行訪問 ,在內(nèi)存中存放數(shù)據(jù),如果太大的數(shù)據(jù)會造成 內(nèi)存溢出 ??梢酝ㄟ^參數(shù) max_heap_table_size 控制Memory表的大小,限制Memory表的最大的大小。
- 如果 數(shù)據(jù)是臨時的 ,而且 必須立即可用 得到,那么就可以放在內(nèi)存中。
- 存儲在Memory表中的數(shù)據(jù)如果突然間 丟失的話也沒有太大的關(guān)系 。
五、引擎對比
六、MyISAM和InnoDB
文章來源:http://www.zghlxwxcb.cn/news/detail-426084.html
七、InnoDB的優(yōu)勢
??InnoDB存儲引擎在實際應(yīng)用中擁有諸多優(yōu)勢,比如操作便利、提高了數(shù)據(jù)庫的性能、維護(hù)成本低等。如果由于硬件或軟件的原因?qū)е路?wù)器崩潰,那么在重啟服務(wù)器之后不需要進(jìn)行額外的操作。
??InnoDB崩潰恢復(fù)功能自動將之前提交的內(nèi)容定型,然后撤銷沒有提交的進(jìn)程,重啟之后繼續(xù)從崩潰點(diǎn)開始執(zhí)行。InnoDB存儲引擎在主內(nèi)存中維護(hù)緩沖池,高頻率使用的數(shù)據(jù)將在內(nèi)存中直接被處理。這種緩存方式應(yīng)用于多種信息,加速了處理進(jìn)程。
??在專用服務(wù)器上,物理內(nèi)存中高達(dá)80%的部分被應(yīng)用于緩沖池。如果需要將數(shù)據(jù)插入不同的表中,可以設(shè)置外鍵加強(qiáng)數(shù)據(jù)的完整性。更新或者刪除數(shù)據(jù),關(guān)聯(lián)數(shù)據(jù)將會被自動更新或刪除。如果試圖將數(shù)據(jù)插入從表,但在主表中沒有對應(yīng)的數(shù)據(jù),插入的數(shù)據(jù)將被自動移除。如果磁盤或內(nèi)存中的數(shù)據(jù)出現(xiàn)崩潰,在使用臟數(shù)據(jù)之前,校驗和機(jī)制會發(fā)出警告。當(dāng)每個表的主鍵都設(shè)置合理時,與這些列有關(guān)的操作會被自動優(yōu)化。插入、更新和刪除操作通過做改變緩沖自動機(jī)制進(jìn)行優(yōu)化。 InnoDB不僅支持當(dāng)前讀寫,也會緩沖改變的數(shù)據(jù)到數(shù)據(jù)流磁盤 。
??InnoDB的性能優(yōu)勢不只存在于長時運(yùn)行查詢的大型表。在同一列多次被查詢時,自適應(yīng)哈希索引會提高查詢的速度。使用InnoDB可以壓縮表和相關(guān)的索引,可以 在不影響性能和可用性的情況下創(chuàng)建或刪除索引 。對于大型文本和BLOB數(shù)據(jù),使用動態(tài)行形式,這種存儲布局更高效。通過查詢INFORMATION_SCHEMA庫中的表可以監(jiān)控存儲引擎的內(nèi)部工作。在同一個語句中,InnoDB表可以與其他存儲引擎表混用。即使有些操作系統(tǒng)限制文件大小為2GB,InnoDB仍然可以處理。 當(dāng)處理大數(shù)據(jù)量時,InnoDB兼顧C(jī)PU,以達(dá)到最大性能 。文章來源地址http://www.zghlxwxcb.cn/news/detail-426084.html
到了這里,關(guān)于【MySQL高級】——存儲引擎的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!