MySql中的存儲(chǔ)引擎和索引
一、MySql的邏輯結(jié)構(gòu)
MySQL體系結(jié)構(gòu)分為四層:分別是連接層、服務(wù)層、存儲(chǔ)引擎層、系統(tǒng)文件層。
- 連接層又稱為客戶端連接器(Client Connectors):提供與MySQL服務(wù)器建立的支持。連接池:管理、緩沖用戶的連接,線程處理等需要緩存的需求。
- 服務(wù)層是MySQL Server的核心:主要包含系統(tǒng)管理和控制工具、SQL接口、解析器、查詢優(yōu)化器、緩存。
- 存儲(chǔ)引擎層:負(fù)責(zé)MySQL中數(shù)據(jù)的存儲(chǔ)與提取,與底層系統(tǒng)文件進(jìn)行交互。MySQL存儲(chǔ)引擎是插件式的,不同的存儲(chǔ)引擎具備不同的功能,可以根據(jù)自己的需要進(jìn)行選擇,最常見的是MyISAM和InnoDB。插件式存儲(chǔ)引擎:管理和操作數(shù)據(jù)的一種機(jī)制,包括(存儲(chǔ)數(shù)據(jù)、如何更新、查詢數(shù)據(jù)等)
- 系統(tǒng)文件層:將數(shù)據(jù)庫(kù)的數(shù)據(jù)和日志存儲(chǔ)在文件系統(tǒng)之上,并完成與存儲(chǔ)引擎的交互,是文件的物理存儲(chǔ)層。主要包含日志文件(redolog,undo.log),數(shù)據(jù)文件,索引文件,二進(jìn)制日志,錯(cuò)誤日志,配置文件,pid 文件,socket 文件等。
二、什么是存儲(chǔ)引擎
MySql數(shù)據(jù)庫(kù)使用不同的機(jī)制存取表文件,有不同的存儲(chǔ)方式,索引技巧,鎖定水平且廣泛的功能和能力。將這些不同的技術(shù)及配套的功能稱為存儲(chǔ)引擎。
MySQL支持的存儲(chǔ)引擎
MySQL5.7支持的引擎包括:InnoDB、MyISAM、MEMORY、Archive、Federate、CSV、BLACKHOLE等,其中較為常用的有三種:InnoDB、MyISAM、MEMORY。
三、操作
查詢數(shù)據(jù)庫(kù)支持的存儲(chǔ)引擎:
SHOW ENGINES;
查詢某個(gè)數(shù)據(jù)庫(kù)中所有數(shù)據(jù)表的存儲(chǔ)引擎:
// 標(biāo)準(zhǔn)語(yǔ)法: SHOW TABLE STATUS FROM 數(shù)據(jù)庫(kù)名稱; // 查詢db4數(shù)據(jù)庫(kù)所有表的存儲(chǔ)引擎 SHOW TABLE STATUS FROM db4;
查詢某個(gè)數(shù)據(jù)庫(kù)中某個(gè)表的存儲(chǔ)引擎:
//標(biāo)準(zhǔn)語(yǔ)法: SHOW TABLE STATUS FROM 數(shù)據(jù)庫(kù)名稱 WHERE NAME = '數(shù)據(jù)表名稱'; // 查看db4數(shù)據(jù)庫(kù)中user表的存儲(chǔ)引擎 SHOW TABLE STATUS FROM db2 WHERE NAME='user';
創(chuàng)建數(shù)據(jù)表指定存儲(chǔ)引擎:
// 標(biāo)準(zhǔn)語(yǔ)法:CREATE TABLE 表名( 列名,數(shù)據(jù)類型, ... )ENGINE = 引擎名稱; CREATE TABLE engine_test( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10) )ENGINE=MYISAM;
修改數(shù)據(jù)表的存儲(chǔ)引擎:
// 標(biāo)準(zhǔn)語(yǔ)法: ALTER TABLE 表名 ENGINE = 引擎名稱; // 修改engine_test表的存儲(chǔ)引擎為InnoDB ALTER TABLE engine_test ENGINE=INNODB;
四、數(shù)據(jù)庫(kù)的索引
MySQL數(shù)據(jù)庫(kù)中的索引:是幫助MySQL高效獲取數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu)!所以,索引的本質(zhì)就是數(shù)據(jù)結(jié)構(gòu)。
在表數(shù)據(jù)之外,數(shù)據(jù)庫(kù)系統(tǒng)還維護(hù)著滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式指向數(shù)據(jù), 這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)上實(shí)現(xiàn)高級(jí)查找算法,這種數(shù)據(jù)結(jié)構(gòu)就是索引。
索引的分類
- 普通索引: 最基本的索引,它沒有任何限制。
- 唯一索引:索引列的值必須是唯一,允許有控制,如果是組合索引,則列值組合必須唯一。
- 主鍵索引:一種特殊的唯一索引,不允許有空值。一般在建表是同時(shí)創(chuàng)建主鍵索引。
- 組合索引:將單列索引進(jìn)行組合
- 外鍵索引: 只有InnoDB引擎支持外鍵索引,用來(lái)保證數(shù)據(jù)的一致性、完整性和實(shí)現(xiàn)聯(lián)級(jí)操作。
- 全文索引:快速匹配全部文檔的方式。InnoDB引擎5.6版本后才支持全文索引。MEMORY引擎不支持。
五、索引操作
創(chuàng)建索引:
CREATE [UNIQUE|FULLTEXT] INDEX 索引名稱 [USING 索引類型] -- 默認(rèn)是BTREE ON 表名(列名...); // 為student表中的name列創(chuàng)建一個(gè)普通索引 CREATE INDEX idx_name ON student(NAME); //為student表中的age列創(chuàng)建一個(gè)唯一索引 CREATE UNIQUE INDEX idx_age ON student(age);
查詢索引:
// 標(biāo)準(zhǔn)語(yǔ)法: SHOW INDEX FROM 表名; // 查詢student表中的索引 (主鍵列自帶主鍵索引) SHOW INDEX FROM student;
添加索引:
ALTER添加索引 -- 普通索引 ALTER TABLE 表名 ADD INDEX 索引名稱(列名); -- 組合索引 ALTER TABLE 表名 ADD INDEX 索引名稱(列名1,列名2,...); -- 主鍵索引 ALTER TABLE 表名 ADD PRIMARY KEY(主鍵列名); -- 外鍵索引(添加外鍵約束,就是外鍵索引) ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (本表外鍵列名) REFERENCES 主表名(主鍵列名); -- 唯一索引 ALTER TABLE 表名 ADD UNIQUE 索引名稱(列名); -- 全文索引 ALTER TABLE 表名 ADD FULLTEXT 索引名稱(列名);
刪除索引:
// 標(biāo)準(zhǔn)語(yǔ)法:DROP INDEX 索引名稱 ON 表名; // 刪除idx_score索引 DROP INDEX idx_score ON student;
到此這篇關(guān)于MySql中的存儲(chǔ)引擎和索引的文章就介紹到這了,更多相關(guān)MySql存儲(chǔ)引擎內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql中TIMESTAMPDIFF函數(shù)的語(yǔ)法與練習(xí)案例
在應(yīng)用時(shí)經(jīng)常要使用這兩個(gè)函數(shù)TIMESTAMPDIFF和TIMESTAMPADD,下面這篇文章主要給大家介紹了關(guān)于Mysql中TIMESTAMPDIFF函數(shù)的語(yǔ)法與練習(xí)案例的相關(guān)資料,需要的朋友可以參考下2022-09-09MySQL服務(wù)無(wú)法啟動(dòng)的解決辦法(親測(cè)有效)
用管理員身份打開cmd試圖啟動(dòng)MySQL時(shí)出現(xiàn)服務(wù)無(wú)法啟動(dòng)并提示服務(wù)沒有報(bào)錯(cuò)任何錯(cuò)誤,所以本文小編給大家介紹了一個(gè)親測(cè)有效的解決辦法,需要的朋友可以參考下2023-12-12mySQL count多個(gè)表的數(shù)據(jù)實(shí)例詳解
這篇文章通過(guò)實(shí)例給大家介紹了mySQL中count多個(gè)表的數(shù)據(jù),也就是多個(gè)表如何聯(lián)合查詢,文中通過(guò)項(xiàng)目中遇到的一個(gè)問題進(jìn)行分析和實(shí)現(xiàn),給出了詳細(xì)的示例代碼,相信對(duì)大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面來(lái)一起看看吧。2016-11-11簡(jiǎn)單了解MYSQL數(shù)據(jù)庫(kù)優(yōu)化階段
這篇文章主要介紹了簡(jiǎn)單了解MYSQL數(shù)據(jù)庫(kù)優(yōu)化階段,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04