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