MySQL數據庫入門到大蛇尚硅谷宋紅康老師筆記 高級篇 part 5

第05章_存儲引擎

為了管理方便,人們把連接管理、查詢緩存、語法解析、查詢優化這些并不涉及真實數據存儲的功能劃分為MySQLserver的功能,把真實存取數據的功能劃分為存儲引擎的功能。所t以在MySQLserver完成了查詢優化后,只需按照生成的執行計劃調用底層存儲引擎提供的API,獲取到數據后返回給客戶端就好了。
MySQL中提到了存儲引擎的概念。簡而言之,存儲引擎就是指表的類型。其實存儲引擎以前叫做表處理器,后來改名為存儲引擎,它的功能就是接收上層傳下來的指令,然后對表中的數據進行提取或寫入操作。

show engines;  即可查看存儲引擎

??2.設置系統默認的存儲引擎

查看默認的存儲引擎:
show variables like '%storage_engine%';
#或
SELECT @@default_storage_engine;

如果在創建表的語句中沒有顯式指定表的存儲引擎的話,那就會默認使用InnoDB作為表的存儲引擎。如果我們想改變表的默認存儲引擎的話,可以這樣寫啟動服務器的命令行:

SET DEFAULT_STORAGE_ENGINE=MyISAM;

·修改默認的存儲引擎
如果在創建表的語句中沒有顯式指定表的存儲引擎的話,那就會默認使用InnoDB作為表的存儲引擎。如果我們想改變表的默認存儲引擎的話,可以這樣寫啟動服務器的命令行:

SET DEFAULT_STORAGE_ENGINE=MyISAM;或者修改my.cnf文件:
deflault-storage-engine=MyISAM
#重啟服務
systemctl restart mysqld.service

接下來我們

show variables like 'datadir'當我們指明類型時,比如:
create table emp4(id int) engine=InnodB;   #MyISAM
再cd一下   cd /var/lib/mysql
ll查看,發現沒修改InnodB之前是ibd的格式,修改后MyISAM則為sdi和MYD,MYI的格式

4.引擎介紹

4.1InnoDB引擎:具備外鍵支持功能的事務存儲引擎 (前面提過實際上很多時候不建議使用外鍵)

  • MySQL從3.23.34a開始就包含lnnoDB存儲引擎。大于等于5.5之后,默認采用InnoDB引擎。
  • InnoDB是MySQL的默認事務型引擎,它被設計用來處理大量的短期(short-lived)事務。可以確保事務的完整提交(Commit)和回滾(Rollback)。
    比如說現在有2個DML操作,分別是 小a- 100元和小b +100元
  • 除了增加和查詢外,還需要更新、刪除操作,那么,應優先選擇InnoDB存儲引擎。
  • 除非有非常特別的原因需要使用其他的存儲引擎,否則應該優先考慮InnoDB引擎。
  • 數據文件結構:(在《第o2章_MySQL數據目錄》章節已講)
    1. 表名.frm存儲表結構(MySQL8.0時,合并在表名.ibd中)
    2. 表名.ibd存儲數據和索引
  • InnoDB是為處理巨大數據量的最大性能設計。
    在以前的版本中,字典數據以元數據文件、非事務表等來存儲。現在這些元數據文件被刪除了。比如:.frm,·par,.trn,.isl,.db.opt等都在MysQL8.o中不存在了。
  • 對比MyISAM的存儲引擎,InnoDB寫的處理效率差一些,并且會占用更多的磁盤空間以保存數據和索引。即更擅長事物和大規模數據,簡單的增刪改查不如MyISAM
  • MyISAM只緩存索引,不緩存真實數據;InnoDB不僅緩存索引引還要緩存真實數據,對內存要求較高,而且內存大小對性能有決定性的影響。

?課外補充:
1、InnoDB表的優勢
InnoDB存儲引擎在實際應用中擁有諸多優勢,比如操作便利、提高了數據庫的性能、維護成本低等。如果由于硬件或軟件的原因導致服務器崩潰,那么在重啟服務器之后不需要進行額外的操作。InnoDB崩潰恢復功能自動將之前提交的內容定型,然后撤銷沒有提交的進程,重啟之后繼續從崩潰點開始執行。
InnoDB存儲引擎在主內存中維護緩沖池,高頻率使用的數據將在內存中直接被處理。這種緩存方式應用于多種信息,加速了處理進程。
在專用服務器上,物理內存中高達80%的部分被應用于緩沖池。如果需要將數據插入不同的表中,可以設置外鍵加強數據的完整性。更新或者刪除數據,關聯數據將會被自動更新或刪除。如果試圖將數據插入從表,但在主表中沒有對應的數據,插入的數據將被自動移除。

如果磁盤或內存中的數據出現崩潰,在使用臟數據之前,校驗和機制會發出警告。當每個表的主鍵都設置合理時,與這些列有關的操作會被自動優化。插入、更新和刪除操作通過做改變緩沖自動機制進行優化。InnoDB不僅支持當前讀寫,也會緩沖改變的數據到數據流磁盤。

?4.2MyISAM引擎:主要的非事務處理存儲引|擎

·MyISAM提供了大量的特性,包括全文索引I、壓縮、空間函數(GIS)等,但MyISAM不支持事務、行級鎖、外鍵,有一個毫無疑問的缺陷就是崩潰后無法安全恢復。

  • ·5.5之前默認的存儲引擎
  • ·優勢是訪問的速度快,對事務完整性沒有要求或者以SELECT、INSERT為主的應用
  • ·針對數據統計有額外的常數存儲。故而count(*)的查詢效率很高
  • ·數據文件結構:(在《第02章_MySQL數據目錄》章節已講)
    1. 表名.frm存儲表結構
    2. 表名.MYD存儲數據(MYData)
    3. 表名.MYI存儲索引(MYIndex)
  • ·應用場景:只讀應用或者以讀為主的業務
對比項MyISAMInnoDB
外鍵不支持支持
事務不支持支持
行表鎖表鎖,即使操作一條記錄也會鎖住整個表,不適合高并發的操作行鎖,操作時只鎖某一行,不對其它行有影響,適合高并發的操作
緩存只緩存索引,不緩存真實數據不僅緩存索引還要緩存真實數據,對內存要求較高,而且內存大小對性能有決定性的影響
自帶系統表使用YN
關注點性能:節省資源、消耗少、簡單業務事務:并發寫、事務、更大資源
默認安裝YI
默認使用NY

以下的其實就相對不常見了

4.3Archive引擎:用于數據存檔

  • archive是歸檔的意思,僅僅支持插入和查詢兩種功能(行被插入后不能再修改)。
  • 在MySQL5.5以后支持索引功能。
  • 擁有很好的壓縮機制,使用zlib壓縮庫,在記錄請求的時候實時的進行壓縮,經常被用來作為倉庫使用。
  • 創建ARCHIVE表時,存儲引擎會創建名稱以表名開頭的文件。數據文件的擴展名為??.ARZ
  • 根據英文的測試結論來看,同樣數據量下,Archive表比MyISAM表要小大約75%,比支持事務處理的InnoDB表小大約83%。
  • ARCHIVE存儲引擎采用了行級鎖。該ARCHIVE引擎支持AUTO_INCREMENT列屬性 . AUTO_INCREMENT列可以具有唯一索引或非唯一索引。嘗試在任何其他列上創建索引會導致錯誤。
  • Archive表適合日志和數據采集(檔案)類應用;適合存儲大量的獨立的作為歷史記錄的數據。擁有很高的插入速度,但是對查詢的支持較差。
  • 下表展示了ARCHIVE存儲引擎功能

4.4? Blackhole引擎:丟棄寫操作,讀操作會返回空內容

  • Blackhole引擎沒有實現任何存儲機制,它會丟棄所有插入的數據,不做任何保存。
  • 但服務器會記錄Blackhole表的日志,所以可以用于復制數據到備庫,或者簡單地記錄到日志。但這種應用方式會碰到很多問題,因此并不推薦。

4.5? CSV引擎:存儲數據時,以逗號分隔各個數據項

  • ·CSV引擎可以將普通的CSV文件作為MySQL的表來處理,但不支持索引。
  • ·CSV引擎可以作為一種數據交換的機制,非常有用。數模中常見啊😭😭😭😭😭
  • ·CSV存儲的數據直接可以在操作系統里,用文本編輯器,或者excel讀取。
  • ·對于數據的快速導入、導出是有明顯優勢的。
  • 創建CSV表時,服務器會創建一個純文本數據文件,其名稱以表名開頭并帶有.CSV擴展名。當你將數據存儲到表中時,存儲引擎將其以逗號分隔值格式保存到數據文件中。?
mysql> create table csv_demo(id int,name char (20)) engine=csv;
報錯了,說對著這種表不支持空列,因此有加入空列
因此應該是:
create table csv_demo(id int not null ,name char (20) not null) engine=csv;

?ll后發現 csv_demo.CSV的文件和CSM的源文件

?4.6Memory引擎:置于內存的表

概述:Memory采用的邏輯介質是內存,響應速度很快,但是當mysqld守護進程崩潰的時候數據會丟失。另外,要求存儲的數據是數據長度不變的格式,比如,Blob和Text類型的數據不可用(長度不固定的)。

主要特征:

  • Memory同時支持哈希(HASH)索引和B+樹索引。
    1. 哈希索引相等的比較快,但是對于范圍的比較慢很多。
    2. 默認使用哈希(HASH)索引,其速度要比使用B型樹(BTREE)索引快。
    3. 如果希望使用B樹索引,可以在創建索引時選擇使用。
  • Memory表至少比MyISAM表要快一個數量級
  • MEMORY表的大小是受到限制的。表的大小主要取決于兩個參數,分別是max_rows和
  • max_heap_table_size。其中,max_rows可以在創建表時指定;max_heap_table_size的大小默認為16MB,可以按需要進行擴大。
  • ·數據文件與索引文件分開存儲。
    1. 每個基于MEMORY存儲引擎的表實際對應一個磁盤文件,該文件的文件名與表名相同,類型為frm類型,該文件中只存儲表的結構,而其數據文件都是存儲在內存中的。
    2. 這樣有利于數據的快速處理,提供整個表的處理效率。
  • 缺點:其數據易丟失,生命周期短。基于這個缺陷,選擇MEMORY存儲引擎時需要特別小心。

使用Memory存儲引擎的場景:1.目標數據比較小,而且非常頻繁的進行訪問,在內存中存放數據,如果太大的數據會造成內存溢出。可以通過參數max_heap_table_size控制Memory表的大小,限制Memory表的最大的大小。2.如果數據是臨時的,而且必須立即可用得到,那么就可以放在內存中。3.存儲在Memory表中的數據如果突然間丟失的話也沒有太大的關系。

4.7Federated引l擎:訪問遠程表

Federated引擎是訪問其他MySQL服務器的一個代理,盡管該引擎看起來提供了一種很好的跨服務器的靈活性,但也經常帶來問題,因此默認是禁用的。

4.8Merge引l擎:管理多個MylSAM表構成的表集合

4.9NDB引擎:MySQL集群專用存儲引擎

也叫做NDBCluster存儲引擎,主要用于MySQLCluster分布式集群環境,類似于Oracle的RAC集群。

6.阿里巴巴、淘寶用哪個

Percona為MySQL數據庫服務器進行了改進,在功能和性能上較MySQL有很顯著的提升。
該版本提升了在高負載情況下的InnoDB的性能、為DBA提供一些非常有用的性能診斷工具;另外有更多的參數和命令來控制服務器行為。
該公司新建了一款存儲引擎叫Xtradb完全可以替代Innodb,并且在性能和并發上做得更好
阿里巴巴大部分mysq數據庫其實使用的percona的原型加以修改。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72077.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVA面試_進階部分_23種設計模式總結

1. 單例模式:確保某一個類只有一個實例,而且自行實例化并向整個系統提供這 個實例。 (1)懶漢式 public class Singleton { /* 持有私有靜態實例,防止被引用,此處賦值為null,目的是實現延遲加載…

滲透測試(WAF過濾information_schema庫的繞過,sqllib-46關,海洋cms9版本的注入)

1.sqlin-lib 46關 打開網站配置文件發現 此網站的對ID進行了排序,我們可以知道,order by接不了union ,那我們可以通過測試sort,rond等函數,觀察網頁的反饋來判斷我們的盲注是否正確 我們發現 當參數有sort來排序時&…

AORO M6北斗短報文終端:將“太空黑科技”轉化為安全保障

在衛星導航領域,北斗系統作為我國自主研發的全球衛星導航系統,正以其獨特的短報文通信功能引發全球范圍內的廣泛關注。這一突破性技術不僅使北斗系統在全球四大導航系統中獨樹一幟,具備了雙向通信能力,更通過遨游通訊推出的AORO M…

ARCGIS國土超級工具集1.4更新說明

ARCGIS國土超級工具集V1.4版本,功能已增加至54 個。本次更新在V1.3版本的基礎上,新增了“拓撲問題修復工具”并同時調整了數據處理工具欄的布局、工具操作界面的選擇圖層下拉框新增可選擇位于圖層組內的要素圖層功能、數據保存路徑新增了可選擇數據庫內的…

Element Plus中el-select選擇器的下拉選項列表的樣式設置

el-select選擇器,默認樣式效果: 通過 * { margin: 0; padding: 0; } 去掉內外邊距后的樣式效果(樣式變丑了): 通過 popper-class 自定義類名修改下拉選項列表樣式 el-select 標簽設置 popper-class"custom-se…

基于Linux系統的物聯網智能終端

背景 產品研發和項目研發有什么區別?一個令人發指的問題,剛開始工作時項目開發居多,認為項目開發和產品開發區別不大,待后來隨著自身能力的提升,逐步感到要開發一個好產品還是比較難的,我認為項目開發的目的…

java excel xlsx 增加數據驗證

隱藏表下拉框 // 創建隱藏工作表存儲下拉框數據String hiddenSheetName "HiddenSheet"System.currentTimeMillis();Sheet hiddenSheet workbook.createSheet(hiddenSheetName);//設置隱藏sheetworkbook.setSheetHidden(workbook.getSheetIndex(hiddenSheetName), …

linux中安裝部署Jenkins,成功構建springboot項目詳細教程

參考別人配置Jenkins的git地址為https,無法連上github拉取項目,所以本章節介紹通過配置SSH地址來連github拉取項目 目錄: 1、springboot項目 1.1 創建名為springcloudproject的springboot項目工程 1.2 已將工程上傳到github中,g…

提升數據洞察力:五款報表軟件助力企業智能決策

概述 隨著數據量的激增和企業對決策支持需求的提升,報表軟件已經成為現代企業管理中不可或缺的工具。這些軟件能夠幫助企業高效處理數據、生成報告,并將數據可視化,從而推動更智能的決策過程。 1. 山海鯨報表 概述: 山海鯨報表…

MySQL中replace函數用法

語法:replace(field,search,replace) 說明:field - 數據庫表的列名 search - 需要替換的字符串 replace - 替換成的字符串 語義:將列名:field 中出現的search字符串,全部替換成replace字符串。 例子: …

Wireshark Lua 插件教程

本?主要介紹 Lua 腳本在 Wireshark 中的應?, Lua 腳本可以在 Wireshark 中完成如下功能: 從?絡包中提取數據, 或者統計?些數據包(Dumper) 需要解析?種 Wireshark 不提供原??持的協議(Dissector) ?例 協議解析 VREP 協議是 NOGD 框架對于 TRIP 協議的?種延伸和擴展…

吐血整理:在 Docker 中運行 Milvus

直接用docker 錯誤命令(這個我試了三遍,浪費了很多時間): docker run -d --name milvus -p 19530:19530 -p 9091:9091 -v /var/lib/milvus:/var/lib/milvus milvusdb/milvus:latest 先看報錯: 2025-02-24 16:02:39 …

【uniapp】在UniApp中實現持久化存儲:安卓--生成寫入數據為jsontxt

在移動應用開發中,數據存儲是一個至關重要的環節。對于使用UniApp開發的Android應用來說,緩存(Cache)是一種常見的數據存儲方式,它能夠提高應用的性能和用戶體驗。然而,緩存數據在用戶清除緩存或清除應用數…

【Excel】 Power Query抓取多頁數據導入到Excel

抓取多頁數據想必大多數人都會,只要會點編程技項的人都不會是難事兒。那么,如果只是單純的利用Excel軟件,我還真的沒弄過。昨天,我就因為這個在網上找了好久發好久。 1、在數據-》新建查詢-》從其他源-》自網站 ,如圖 …

星環科技推出DeepSeek全場景解決方案:即開即用、企業級部署、端側智能三位一體

星環科技(688031.SH)正式發布DeepSeek全場景解決方案,全面覆蓋個人用戶、企業客戶及行業場景需求,為用戶提供從個人到企業、從云端到本地的全方位AI應用支持,為不同需求的用戶提供了靈活、高效且安全的AI解決方案。 省…

let、const【ES6】

?“我唯一知道的就是我一無所知。” - 蘇格拉底 目錄 塊級作用域:var、let、const的對比:Object.freeze(): 塊級作用域: 塊級作用域指由 {} 包圍的代碼塊(如 if、for、while、單獨代碼塊等)形成的獨立作用…

C++ 常見面試知識點

主要介紹C常見面試題 1、說一下你理解的C中的四種智能指針 常用接口 T* get(); T& operator*(); T* operator->(); T& operator(const T& val); T* release(); 將 封裝在內部的指針置為nullptr, 但并不會破壞指針所指向的內容, 函 數返回的是內部指針置空之前…

AWS API Gateway灰度驗證實現

在微服務架構中,灰度發布(金絲雀發布)是驗證新版本穩定性的核心手段。通過將小部分流量(如 10%)導向新版本服務,可以在不影響整體系統的情況下快速發現問題。AWS API Gateway 原生支持流量按比例分配功能,無需復雜編碼即可實現灰度驗證。本文將詳細解析其實現方法、最佳…

基于coze+微信小程序實現圖片上傳并利用大模型解析

項目截圖&#xff1a; 實現代碼&#xff08;直接搬去可用&#xff09; 前提&#xff1a;需要填寫你的oss配置coze的api授權配置&#xff01;&#xff01;&#xff01; <template><view class"container"><!-- 高斯模糊背景 --><view class&qu…

Spring-boot3.4最新版整合swagger和Mybatis-plus

好家伙,今天終于開始用spring-boot3開始寫項目了&#xff0c;以后要徹底告別1.x和2.x了&#xff0c;同樣的jdk也來到了最低17的要求了,廢話不多說直接開始 這是官方文檔的要求jdk最低是17 maven最低是3.6 一. 構建工程,這一步就不需要給大家解釋了吧 二. 整合Knife4j 1.大于…