当前位置:网站首页>MySQL23-存儲引擎
MySQL23-存儲引擎
2022-07-06 10:33:00 【保護我方阿遙】
一. 查看存儲引擎
- 查看mysql提供什麼存儲引擎:
show engines;
show engines \G;
二. 設置系統默認的存儲引擎
- 查看默認的存儲引擎:
show variables like '%storage_engine%';
#或
SELECT @@default_storage_engine;
- 修改默認的存儲引擎
如果在創建錶的語句中沒有顯式指定錶的存儲引擎的話,那就會默認使用 InnoDB 作為錶的存儲引擎。如果我們想改變錶的默認存儲引擎的話,可以這樣寫啟動服務器的命令行。
SET DEFAULT_STORAGE_ENGINE=MyISAM;
或者修改 my.cnf 文件:
default-storage-engine=MyISAM
# 重啟服務
systemctl restart mysqld.service
三. 設置錶的存儲引擎
存儲引擎是負責對錶中的數據進行提取和寫入工作的,我們可以為 不同的錶設置不同的存儲引擎 ,也就是說不同的錶可以有不同的物理存儲結構,不同的提取和寫入方式。
3.1. 創建錶時指定存儲引擎
我們之前創建錶的語句都沒有指定錶的存儲引擎,那就會使用默認的存儲引擎 InnoDB 。如果我們想顯式的指定一下錶的存儲引擎,那可以這麼寫:
CREATE TABLE 錶名(
建錶語句;
) ENGINE = 存儲引擎名稱;
3.2. 修改錶的存儲引擎
如果錶已經建好了,我們也可以使用下邊這個語句來修改錶的存儲引擎:
ALTER TABLE 錶名 ENGINE = 存儲引擎名稱;
create table engine_demo_table(
c1 int primary key,
c2 varchar(25));
show create table engine_demo_table;
alter table engin_demo_table engine=MYISAM;
show create table engine_demo_table;
四. 引擎介紹
4.1. InnoDB 引擎:具備外鍵支持功能的事務存儲引擎
- MySQL從3.23.34a開始就包含InnoDB存儲引擎。 大於等於5.5之後,默認采用InnoDB引擎 。
- InnoDB是MySQL的 默認事務型引擎 ,它被設計用來處理大量的短期(short-lived)事務。可以確保事務的完整提交(Commit)和回滾(Rollback)。
- 除了增加和查詢外,還需要更新、删除操作,那麼,應優先選擇InnoDB存儲引擎。
- 除非有非常特別的原因需要使用其他的存儲引擎,否則應該優先考慮InnoDB引擎。
- 數據文件結構:
- 錶名.frm 存儲錶結構(MySQL8.0時,合並在錶名.ibd中)。
- 錶名.ibd 存儲數據和索引。
- InnoDB是 為處理巨大數據量的最大性能設計 。
- 在以前的版本中,字典數據以元數據文件、非事務錶等來存儲。現在這些元數據文件被删除了。比如: .frm , .par , .trn , .isl , .db.opt 等都在MySQL8.0中不存在了。
- 對比MyISAM的存儲引擎, InnoDB寫的處理效率差一些 ,並且會占用更多的磁盤空間以保存數據和索引。
- MyISAM只緩存索引,不緩存真實數據;InnoDB不僅緩存索引還要緩存真實數據, 對內存要求較高 ,而且內存大小對性能有决定性的影響。
4.2. MyISAM 引擎:主要的非事務處理存儲引擎
- MyISAM提供了大量的特性,包括全文索引、壓縮、空間函數(GIS)等,但MyISAM 不支持事務、行級鎖、外鍵 ,有一個毫無疑問的缺陷就是 崩潰後無法安全恢複 。
- 5.5之前默認的存儲引擎。
- 優勢是訪問的 速度快 ,對事務完整性沒有要求或者以SELECT、INSERT為主的應用。
- 針對數據統計有額外的常數存儲。故而 count(*) 的查詢效率很高。
- 數據文件結構:
- 錶名.frm 存儲錶結構。
- 錶名.MYD 存儲數據 (MYData)。
- 錶名.MYI 存儲索引 (MYIndex)。
- 應用場景:只讀應用或者以讀為主的業務。
4.3. Archive 引擎:用於數據存檔
- 下錶展示了ARCHIVE 存儲引擎功能
特征 | 支持 |
---|---|
B樹索引 | 不支持 |
備份/時間點恢複 (在服務器中實現,而不是在存儲引擎中) | 支持 |
集群數據庫支持 | 不支持 |
聚集索引 | 不支持 |
壓縮數據 | 支持 |
數據緩存 | 不支持 |
加密數據(加密功能在服務器中實現) | 支持 |
外鍵支持 | 不支持 |
全文檢索索引 | 不支持 |
地理空間數據類型支持 | 支持 |
地理空間索引支持 | 不支持 |
哈希索引 | 不支持 |
索引緩存 | 不支持 |
鎖粒度 | 行鎖 |
MVCC | 不支持 |
存儲限制 | 沒有任何限制 |
交易 | 不支持 |
更新數據字典的統計信息 | 支持 |
4.4. Blackhole 引擎:丟弃寫操作,讀操作會返回空內容
4.5. CSV 引擎:存儲數據時,以逗號分隔各個數據項
使用案例如下
create table testcsv (
i int not null,
c char(10) not null) engine=CSV;
INSERT INTO testcsv VALUES(1,'record one'),(2,'record two');
select * from testcsv;
cd /var/lib/mysql
cd MYSQLTEST/
4.6. Memory 引擎:置於內存的錶
概述:
Memory采用的邏輯介質是 內存 , 響應速度很快 ,但是當mysqld守護進程崩潰的時候 數據會丟失 。另外,要求存儲的數據是數據長度不變的格式,比如,Blob和Text類型的數據不可用(長度不固定的)。
主要特征:
- Memory同時 支持哈希(HASH)索引 和 B+樹索引 。
- Memory錶至少比MyISAM錶要 快一個數量級 。
- MEMORY 錶的大小是受到限制 的。錶的大小主要取决於兩個參數,分別是 max_rows 和max_heap_table_size 。其中,max_rows可以在創建錶時指定;max_heap_table_size的大小默認為16MB,可以按需要進行擴大。
- 數據文件與索引文件分開存儲。
- 缺點:其數據易丟失,生命周期短。基於這個缺陷,選擇MEMORY存儲引擎時需要特別小心。
使用Memory存儲引擎的場景: - 目標數據比較小 ,而且非常 頻繁的進行訪問 ,在內存中存放數據,如果太大的數據會造成 內存溢出 。可以通過參數 max_heap_table_size 控制Memory錶的大小,限制Memory錶的最大的大小。
- 如果 數據是臨時的 ,而且 必須立即可用 得到,那麼就可以放在內存中。
- 存儲在Memory錶中的數據如果突然間 丟失的話也沒有太大的關系 。
4.7. Federated 引擎:訪問遠程錶
Federated引擎是訪問其他MySQL服務器的一個 代理 ,盡管該引擎看起來提供了一種很好的 跨服務器的靈活性 ,但也經常帶來問題,因此 默認是禁用的 。
4.8. Merge引擎:管理多個MyISAM錶構成的錶集合
4.9.NDB引擎:MySQL集群專用存儲引擎
也叫做 NDB Cluster 存儲引擎,主要用於 MySQL Cluster 分布式集群 環境,類似於 Oracle 的 RAC 集群。
4.10. 引擎對比
MySQL中同一個數據庫,不同的錶可以選擇不同的存儲引擎。如下錶對常用存儲引擎做出了對比。
边栏推荐
- MySQL31-MySQL事务日志
- Texttext data enhancement method data argument
- MySQL Real Time Optimization Master 04 discute de ce qu'est binlog en mettant à jour le processus d'exécution des déclarations dans le moteur de stockage InnoDB.
- 15 medical registration system_ [appointment registration]
- First blog
- MySQL combat optimization expert 07 production experience: how to conduct 360 degree dead angle pressure test on the database in the production environment?
- How to build an interface automation testing framework?
- 简单解决phpjm加密问题 免费phpjm解密工具
- Adaptive Bezier curve network for real-time end-to-end text recognition
- [programmers' English growth path] English learning serial one (verb general tense)
猜你喜欢
Download and installation of QT Creator
Pytoch LSTM implementation process (visual version)
Installation of pagoda and deployment of flask project
jar运行报错no main manifest attribute
解决在window中远程连接Linux下的MySQL
MySQL25-索引的创建与设计原则
C miscellaneous shallow copy and deep copy
13 medical registration system_ [wechat login]
14 医疗挂号系统_【阿里云OSS、用户认证与就诊人】
Mysql36 database backup and recovery
随机推荐
Mysql35 master slave replication
Bytetrack: multi object tracking by associating every detection box paper reading notes ()
MySQL實戰優化高手04 借著更新語句在InnoDB存儲引擎中的執行流程,聊聊binlog是什麼?
MySQL實戰優化高手08 生產經驗:在數據庫的壓測過程中,如何360度無死角觀察機器性能?
MNIST implementation using pytoch in jupyter notebook
MySQL27-索引优化与查询优化
Solve the problem of remote connection to MySQL under Linux in Windows
MySQL26-性能分析工具的使用
Google login prompt error code 12501
Set shell script execution error to exit automatically
[programmers' English growth path] English learning serial one (verb general tense)
MySQL实战优化高手10 生产经验:如何为数据库的监控系统部署可视化报表系统?
South China Technology stack cnn+bilstm+attention
基于Pytorch的LSTM实战160万条评论情感分类
MySQL实战优化高手07 生产经验:如何对生产环境中的数据库进行360度无死角压测?
高并发系统的限流方案研究,其实限流实现也不复杂
基于Pytorch肺部感染识别案例(采用ResNet网络结构)
pytorch的Dataset的使用
Case identification based on pytoch pulmonary infection (using RESNET network structure)
MySQL real battle optimization expert 11 starts with the addition, deletion and modification of data. Review the status of buffer pool in the database