elasticsearch入門系列">elasticsearch入門系列
755
2022-05-29
一、MySQL存儲引擎
體系結(jié)構(gòu)的概念
任何一套系統(tǒng)當(dāng)中,每個部件都能起到一定的作用!
MySQL的體系結(jié)構(gòu)
體系結(jié)構(gòu)詳解
客戶端連接
支持接口:支持的客戶端連接,例如C、Java、PHP等語言來連接MySQL數(shù)據(jù)庫
第一層:網(wǎng)絡(luò)連接層
連接池:管理、緩沖用戶的連接,線程處理等需要緩存的需求。
例如:當(dāng)客戶端發(fā)送一個請求連接,會從連接池中獲取一個連接進(jìn)行使用。
第二層:核心服務(wù)層
管理服務(wù)和工具:系統(tǒng)的管理和控制工具,例如備份恢復(fù)、復(fù)制、集群等。
SQL接口:接受SQL命令,并且返回查詢結(jié)果。
查詢解析器:驗證和解析SQL命令,例如過濾條件、語法結(jié)構(gòu)等。
查詢優(yōu)化器:在執(zhí)行查詢之前,使用默認(rèn)的一套優(yōu)化機制進(jìn)行優(yōu)化sql語句
緩存:如果緩存當(dāng)中有想查詢的數(shù)據(jù),則直接將緩存中的數(shù)據(jù)返回。沒有的話再重新查詢!
第三層:存儲引擎層
插件式存儲引擎:管理和操作數(shù)據(jù)的一種機制,包括(存儲數(shù)據(jù)、如何更新、查詢數(shù)據(jù)等)
第四層:系統(tǒng)文件層
文件系統(tǒng):配置文件、數(shù)據(jù)文件、日志文件、錯誤文件、二進(jìn)制文件等等的保存
引擎的概念
生活中,引擎就是整個機器運行的核心,不同的引擎具備不同的功能。
MySQL存儲引擎的概念
MySQL數(shù)據(jù)庫使用不同的機制存取表文件 , 機制的差別在于不同的存儲方式、索引技巧、鎖定水平以及廣泛的不同的功能和能力,在MySQL中 , 將這些不同的技術(shù)及配套的功能稱為存儲引擎
在關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)的存儲是以表的形式存進(jìn)行儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)。
Oracle , SqlServer等數(shù)據(jù)庫只有一種存儲引擎 , 而MySQL針對不同的需求, 配置MySQL的不同的存儲引擎 , 就會讓數(shù)據(jù)庫采取了不同的處理數(shù)據(jù)的方式和擴展功能。
通過選擇不同的引擎 ,能夠獲取最佳的方案 , 也能夠獲得額外的速度或者功能,提高程序的整體效果。所以了解引擎的特性 , 才能貼合我們的需求 , 更好的發(fā)揮數(shù)據(jù)庫的性能。
MySQL支持的存儲引擎
MySQL5.7支持的引擎包括:InnoDB、MyISAM、MEMORY、Archive、Federate、CSV、BLACKHOLE等
其中較為常用的有三種:InnoDB、MyISAM、MEMORY
常用的存儲引擎
MyISAM存儲引擎
訪問快,不支持事務(wù)和外鍵。表結(jié)構(gòu)保存在.frm文件中,表數(shù)據(jù)保存在.MYD文件中,索引保存在.MYI文件中。
InnoDB存儲引擎(MySQL5.5版本后默認(rèn)的存儲引擎)
支持事務(wù) ,占用磁盤空間大 ,支持并發(fā)控制。表結(jié)構(gòu)保存在.frm文件中,如果是共享表空間,數(shù)據(jù)和索引保存在 innodb_data_home_dir 和 innodb_data_file_path定義的表空間中,可以是多個文件。如果是多表空間存儲,每個表的數(shù)據(jù)和索引單獨保存在 .ibd 中。
MEMORY存儲引擎
內(nèi)存存儲 , 速度快 ,不安全 ,適合小量快速訪問的數(shù)據(jù)。表結(jié)構(gòu)保存在.frm中。
特性對比
查詢數(shù)據(jù)庫支持的引擎
-- 標(biāo)準(zhǔn)語法 SHOW ENGINES; -- 查詢數(shù)據(jù)庫支持的存儲引擎 SHOW ENGINES;
-- 表含義: - support : 指服務(wù)器是否支持該存儲引擎 - transactions : 指存儲引擎是否支持事務(wù) - XA : 指存儲引擎是否支持分布式事務(wù)處理 - Savepoints : 指存儲引擎是否支持保存點
查詢某個數(shù)據(jù)庫中所有數(shù)據(jù)表的引擎
-- 標(biāo)準(zhǔn)語法 SHOW TABLE STATUS FROM 數(shù)據(jù)庫名稱; -- 查看db9數(shù)據(jù)庫所有表的存儲引擎 SHOW TABLE STATUS FROM db9;
查詢某個數(shù)據(jù)庫中某個數(shù)據(jù)表的引擎
-- 標(biāo)準(zhǔn)語法 SHOW TABLE STATUS FROM 數(shù)據(jù)庫名稱 WHERE NAME = '數(shù)據(jù)表名稱'; -- 查看db9數(shù)據(jù)庫中stu_score表的存儲引擎 SHOW TABLE STATUS FROM db9 WHERE NAME = 'stu_score';
創(chuàng)建數(shù)據(jù)表,指定存儲引擎
-- 標(biāo)準(zhǔn)語法 CREATE TABLE 表名( 列名,數(shù)據(jù)類型, ... )ENGINE = 引擎名稱; -- 創(chuàng)建db11數(shù)據(jù)庫 CREATE DATABASE db11; -- 使用db11數(shù)據(jù)庫 USE db11; -- 創(chuàng)建engine_test表,指定存儲引擎為MyISAM CREATE TABLE engine_test( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10) )ENGINE = MYISAM; -- 查詢engine_test表的引擎 SHOW TABLE STATUS FROM db11 WHERE NAME = 'engine_test';
修改表的存儲引擎
-- 標(biāo)準(zhǔn)語法 ALTER TABLE 表名 ENGINE = 引擎名稱; -- 修改engine_test表的引擎為InnoDB ALTER TABLE engine_test ENGINE = INNODB; -- 查詢engine_test表的引擎 SHOW TABLE STATUS FROM db11 WHERE NAME = 'engine_test';
MyISAM :由于MyISAM不支持事務(wù)、不支持外鍵、支持全文檢索和表級鎖定,讀寫相互阻塞,讀取速度快,節(jié)約資源,所以如果應(yīng)用是以查詢操作和插入操作為主,只有很少的更新和刪除操作,并且對事務(wù)的完整性、并發(fā)性要求不是很高,那么選擇這個存儲引擎是非常合適的。
InnoDB : 是MySQL的默認(rèn)存儲引擎, 由于InnoDB支持事務(wù)、支持外鍵、行級鎖定 ,支持所有輔助索引(5.5.5后不支持全文檢索),高緩存,所以用于對事務(wù)的完整性有比較高的要求,在并發(fā)條件下要求數(shù)據(jù)的一致性,讀寫頻繁的操作,那么InnoDB存儲引擎是比較合適的選擇,比如BBS、計費系統(tǒng)、充值轉(zhuǎn)賬等
MEMORY:將所有數(shù)據(jù)保存在RAM中,在需要快速定位記錄和其他類似數(shù)據(jù)環(huán)境下,可以提供更快的訪問。MEMORY的缺陷就是對表的大小有限制,太大的表無法緩存在內(nèi)存中,其次是要確保表的數(shù)據(jù)可以恢復(fù),數(shù)據(jù)庫異常終止后表中的數(shù)據(jù)是可以恢復(fù)的。MEMORY表通常用于更新不太頻繁的小表,用以快速得到訪問結(jié)果。
總結(jié):針對不同的需求場景,來選擇最適合的存儲引擎即可!如果不確定、則使用數(shù)據(jù)庫默認(rèn)的存儲引擎!
MySQL 數(shù)據(jù)庫
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。