当前位置:网站首页>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中同一個數據庫,不同的錶可以選擇不同的存儲引擎。如下錶對常用存儲引擎做出了對比。
边栏推荐
- MySQL实战优化高手05 生产经验:真实生产环境下的数据库机器配置如何规划?
- NLP routes and resources
- MySQL实战优化高手08 生产经验:在数据库的压测过程中,如何360度无死角观察机器性能?
- Time complexity (see which sentence is executed the most times)
- 简单解决phpjm加密问题 免费phpjm解密工具
- Typescript入门教程(B站黑马程序员)
- Mysql30 transaction Basics
- Mysql35 master slave replication
- 基于Pytorch的LSTM实战160万条评论情感分类
- Redis集群方案应该怎么做?都有哪些方案?
猜你喜欢
Mysql36 database backup and recovery
How to make shell script executable
MySQL实战优化高手12 Buffer Pool这个内存数据结构到底长个什么样子?
MySQL combat optimization expert 03 uses a data update process to preliminarily understand the architecture design of InnoDB storage engine
Sichuan cloud education and double teacher model
Pytorch RNN actual combat case_ MNIST handwriting font recognition
MySQL33-多版本并发控制
实现微信公众号H5消息推送的超级详细步骤
[C language] deeply analyze the underlying principle of data storage
What is the current situation of the game industry in the Internet world?
随机推荐
Sed text processing
软件测试工程师发展规划路线
Security design verification of API interface: ticket, signature, timestamp
MySQL real battle optimization expert 11 starts with the addition, deletion and modification of data. Review the status of buffer pool in the database
13 医疗挂号系统_【 微信登录】
Installation of pagoda and deployment of flask project
Simple solution to phpjm encryption problem free phpjm decryption tool
MySQL實戰優化高手04 借著更新語句在InnoDB存儲引擎中的執行流程,聊聊binlog是什麼?
Mysql30 transaction Basics
text 文本数据增强方法 data argumentation
Texttext data enhancement method data argument
Advantages and disadvantages of evaluation methods
MySQL28-数据库的设计规范
Time in TCP state_ The role of wait?
MySQL底层的逻辑架构
MySQL32-锁
pytorch的Dataset的使用
MySQL combat optimization expert 10 production experience: how to deploy visual reporting system for database monitoring system?
UEditor国际化配置,支持中英文切换
好博客好资料记录链接