国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL-05.存儲(chǔ)引擎

這篇具有很好參考價(jià)值的文章主要介紹了MySQL-05.存儲(chǔ)引擎。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

C-05.存儲(chǔ)引擎

為了方便管理,把連接管理,查詢緩存,語(yǔ)法解析查詢優(yōu)化這些不涉及真實(shí)數(shù)據(jù)存儲(chǔ)的功能劃分為MySQL Server的功能,把真實(shí)存取數(shù)據(jù)的功能劃分為存儲(chǔ)引擎的功能。所以在MySQL Server完成了查詢優(yōu)化后,只需按照生成的執(zhí)行計(jì)劃調(diào)用底層存儲(chǔ)引擎提供的API,獲取到數(shù)據(jù)后返回給客戶端就好了。

MySQL中提到了存儲(chǔ)引擎的概念。簡(jiǎn)而言之,存儲(chǔ)引擎就是表的類型。其實(shí)存儲(chǔ)引擎之前叫做表處理器,后來(lái)改名為存儲(chǔ)引擎,它的功能就是接收上層傳下倆的指令,然后對(duì)表中的數(shù)據(jù)進(jìn)行提取或?qū)懭氩僮鳌?/p>

1.查看存儲(chǔ)引擎

  • 查看存儲(chǔ)引擎指令
show engines;

MySQL-05.存儲(chǔ)引擎
查詢結(jié)果,MySQL8.0支持9種存儲(chǔ)引擎,分別是FEDERATEDMEMORY,InnoDBPERFORMANCE_SCHEMA,MyISAMMRG_MYISAM,BLACKHOLECSVARCHIVE。

  • Engine參數(shù)表示存儲(chǔ)引擎名稱。

  • Support參數(shù)表示MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)是否支持該存儲(chǔ)引擎:YES表示支持,NO表示不支持。DEFAULT表示系統(tǒng)默認(rèn)支持的存儲(chǔ)引擎

  • Comment參數(shù),表示對(duì)存儲(chǔ)引擎的評(píng)論。

  • Transactions參數(shù),表示是否支持事務(wù)。

  • XA參數(shù),表示存儲(chǔ)引擎所支持的分布式是否符合XA規(guī)范,YES支持,NO不支持。代表該存儲(chǔ)引擎是否支持分布式事務(wù)。

  • Savepoints參數(shù),表示存儲(chǔ)引擎是否支持事務(wù)處理的保存點(diǎn),YES支持,NO不支持。也就是說(shuō)存儲(chǔ)引擎,是否支持部分回滾事務(wù)。

mysql> show engines\G
*************************** 1. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
*************************** 2. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 4. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 6. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 7. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 8. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 9. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
9 rows in set (0.00 sec)

2.設(shè)置系統(tǒng)默認(rèn)的存儲(chǔ)引擎

  • 查看默認(rèn)的存儲(chǔ)引擎
show variables like '%storage_engine%';
#或者
select @@global.default_storage_engine;
mysql> select @@global.default_storage_engine;
+---------------------------------+
| @@global.default_storage_engine |
+---------------------------------+
| InnoDB                          |
+---------------------------------+
1 row in set (0.00 sec)
  • 修改默認(rèn)的存儲(chǔ)引擎

如果在創(chuàng)建表的語(yǔ)句中,未指定存儲(chǔ)引擎的話,就會(huì)默認(rèn)使用Innodb作為表的存儲(chǔ)引擎。如果我們想改變表的默認(rèn)存儲(chǔ)引擎的話,可以這樣在執(zhí)行下面的sql語(yǔ)句

SET DEFAULT_STORAGE_ENGINE = MyISAM;

或者修改my.cnf文件

default-storage-engine=MyIASM #之后重啟msyqld服務(wù)

如果創(chuàng)建表時(shí),未指明當(dāng)前表的類型(存儲(chǔ)引擎),則使用當(dāng)前MySQL服務(wù)默認(rèn)的存儲(chǔ)引擎。

3.設(shè)置表的存儲(chǔ)引擎

存儲(chǔ)引擎是負(fù)責(zé)對(duì)表中的數(shù)據(jù)進(jìn)行提取和寫(xiě)入工作的,我們可以為不同的表設(shè)置不同的存儲(chǔ)引擎,也就是說(shuō)不同的表可以有不同的物理存儲(chǔ)結(jié)構(gòu),不同的提取和寫(xiě)入方式。

3.1 創(chuàng)建表時(shí)指定存儲(chǔ)引擎

CREATE TABLE 表名(
	建表語(yǔ)句
) ENGINE = 存儲(chǔ)引擎名稱;
#例子
CREATE TABLE demo2(id int) ENGINE = myisam; 

3.2 修改表的存儲(chǔ)引擎

alter table table_name 
engine = myisam;

#例子
ALTER TABLE demo2 ENGINE = innodb;

4.引擎介紹

4.1 InnoDB引擎:具備外鍵支持功能的事務(wù)存儲(chǔ)引擎(常用)

  • MySQL從3.23.34a開(kāi)始包含Innodb存儲(chǔ)引擎。版本大于等于5.5之后,默認(rèn)采用InnoDB存儲(chǔ)引擎。

  • InnoDB是MySQL的默認(rèn)事務(wù)型引擎,它被設(shè)計(jì)用來(lái)處理大量的短期(short-lived)事務(wù)??梢源_保事務(wù)的完整提交(Commit)和回滾(Rollback)。

  • 除了增加和查詢外,還需要更新,刪除操作,則優(yōu)先選擇InnoDB存儲(chǔ)引擎。

  • 除非有非常特別的原因需要使用其他的存儲(chǔ)引擎,否則應(yīng)該優(yōu)先考慮InnoDB引擎。

  • 數(shù)據(jù)文件結(jié)構(gòu):(在《第02章_MySQL數(shù)據(jù)目錄》)

    • 表名.frm存儲(chǔ)表結(jié)構(gòu)(MySQL8.0時(shí),合并在表名.ibd中)
    • 表名.ibd存儲(chǔ)數(shù)據(jù)和索引
  • InnoDB是為處理巨大數(shù)據(jù)量的最大性能設(shè)計(jì)

    • 在之前的版本中,字典數(shù)據(jù)以元數(shù)據(jù)文件,非事務(wù)表等來(lái)存儲(chǔ)?,F(xiàn)在這些元數(shù)據(jù)文件被刪除了。比如:.frm,.par.trn

      .isl,db.opt等在MySQL8.0中不存在了

  • 對(duì)比MyISAM的存儲(chǔ)引擎,InnoDB寫(xiě)的處理效率會(huì)差一些,并且會(huì)占用更多的磁盤空間以保存數(shù)據(jù)和索引。

  • MyISAM只緩存索引,不緩存真實(shí)數(shù)據(jù);InnoDB不加緩存索引還要緩存真實(shí)數(shù)據(jù),對(duì)內(nèi)存要求較高,而且內(nèi)存大小對(duì)性能有決定性的影響。

4.2 MyISAM引擎:主要的非事務(wù)處理存儲(chǔ)引擎(常用)

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

  • 5.5之前默認(rèn)的存儲(chǔ)引擎

  • 優(yōu)勢(shì)是訪問(wèn)的速度快,對(duì)事務(wù)完整性沒(méi)有要求或者以SELECT,INSERT為主的應(yīng)用。

  • 針對(duì)數(shù)據(jù)統(tǒng)計(jì)有額外的常數(shù)存儲(chǔ)。所以,count(*)的查詢效率很高。

  • 數(shù)據(jù)文件結(jié)構(gòu):

    • 表名.frm存儲(chǔ)表結(jié)構(gòu)
    • 表名.MYD存儲(chǔ)數(shù)據(jù)(MYDATA)
    • 表名.MYI存儲(chǔ)索引(MYINDEX)
  • 應(yīng)用場(chǎng)景:只讀應(yīng)用或者以讀為主的業(yè)務(wù)

4.3 Archive引擎:用于數(shù)據(jù)存檔(了解)

  • archive是歸檔的意思,僅僅支持插入查詢兩種功能(行數(shù)據(jù)插入后,不能修改)。
  • 在MySQL5.5以后支持索引功能。
  • 擁有很好的壓縮機(jī)制,使用zlib壓縮庫(kù),在記錄請(qǐng)求的時(shí)候?qū)崟r(shí)的進(jìn)行壓縮,經(jīng)常被用來(lái)倉(cāng)庫(kù)使用。
  • 創(chuàng)建Archive類型的表,存儲(chǔ)引擎會(huì)創(chuàng)建名稱以表名開(kāi)頭的文件。數(shù)據(jù)文件的擴(kuò)展名為.ARZ。
  • 根據(jù)英文的測(cè)試結(jié)論來(lái)看,同樣數(shù)據(jù)量下,Archive表比MyIASM表小約75%,比支持事務(wù)處理的InnoDB表小約83%。
  • Archive存儲(chǔ)引擎采用了行級(jí)鎖。該Archive引擎支持AUTO_INCREMENT列屬性。AUTO_INCREMENT列可以具有唯一索引或非唯一索引。嘗試在任何其他列上創(chuàng)建索引,會(huì)導(dǎo)致錯(cuò)誤。
  • Archive表適合日志和數(shù)據(jù)采集(檔案)類應(yīng)用;適合存儲(chǔ)大量的獨(dú)立的作為歷史記錄的數(shù)據(jù)。擁有很高的插入速度,但是對(duì)查詢的支持較差。
  • 下圖展示了Archive存儲(chǔ)引擎的功能
    MySQL-05.存儲(chǔ)引擎

4.4 Blackhole引擎:丟棄寫(xiě)操作,讀操作會(huì)返回空內(nèi)容

  • Blackhole引擎沒(méi)有實(shí)現(xiàn)任何存儲(chǔ)機(jī)制,它會(huì)丟棄所有插入的數(shù)據(jù),不做任何保存。
  • 但服務(wù)器會(huì)記錄Blackhole表的日志,所有可以用于復(fù)制數(shù)據(jù)到備庫(kù),或者簡(jiǎn)單地記錄到日志。這種應(yīng)用方式會(huì)有很多問(wèn)題,此存儲(chǔ)引擎不推薦使用。

4.5 CSV引擎:存儲(chǔ)數(shù)據(jù)時(shí),以逗號(hào)分割各個(gè)數(shù)據(jù)項(xiàng)(了解)

  • CSV引擎可以將普通的CSV文件作為MySQL的表來(lái)處理,但不支持索引。
  • CSV引擎可以作為一種數(shù)據(jù)交換的格式,非常有用。
  • CSV存儲(chǔ)的數(shù)據(jù)直接可以在OS里,用文本編輯器,或者execl讀取。
  • 對(duì)于數(shù)據(jù)的快速導(dǎo)入,導(dǎo)出有明顯的優(yōu)勢(shì)。

創(chuàng)建CSV表時(shí),服務(wù)器會(huì)創(chuàng)建一個(gè)純文本數(shù)據(jù)文件,其名稱以表名開(kāi)頭并帶有.CSV擴(kuò)展名。當(dāng)你將數(shù)據(jù)存儲(chǔ)到表中時(shí),存儲(chǔ)引擎將其以逗號(hào)分隔值格式保存到數(shù)據(jù)文件中。

使用案例如下

注意,在創(chuàng)建CSV類型的表示,所有字段必須設(shè)置為非空約束。

mysql> create table CSV_demo(id int not null,name varchar(20) not null) engine = CSV;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into CSV_demo(id,name) values(1,'wind'),(2,'flower');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from CSV_demo;
+----+--------+
| id | name   |
+----+--------+
|  1 | wind   |
|  2 | flower |
+----+--------+
2 rows in set (0.01 sec)

MySQL-05.存儲(chǔ)引擎

4.6 Memory引擎:置于內(nèi)存的表(了解)

概述

Memory采用的邏輯介質(zhì)是內(nèi)存,相應(yīng)速度很快,但是當(dāng)mysqld守護(hù)進(jìn)程崩潰的時(shí)候數(shù)據(jù)會(huì)丟失。另外,要求存儲(chǔ)的數(shù)據(jù)是數(shù)據(jù)長(zhǎng)度不變的格式,比如,Blob和Text類型的數(shù)據(jù)不可用(長(zhǎng)度不固定的)。

主要特征

  • Memory同時(shí)支持哈希(HASH)索引B樹(shù)索引。

    • 哈希索引相等條件比較快,但是對(duì)于范圍的比較慢很多。
    • 默認(rèn)使用哈希(HASH)索引,其速度要比使用B型樹(shù)(BTREE)索引快。
    • 如果希望使用B樹(shù)索引,可以在創(chuàng)建索引時(shí)選擇使用。
  • Memory表至少比MyISAM表要快一個(gè)數(shù)量級(jí)。

  • MEMORY表的大小是受到限制的。表的大小主要取決于兩個(gè)參數(shù),分別是max_rowsmax_heap_table_size。其中,max_rows可以在創(chuàng)建表時(shí)指;max_heap_table_size的大小默認(rèn)為16MB,可以按需進(jìn)行擴(kuò)大。

  • 數(shù)據(jù)文件與索引文件分開(kāi)存儲(chǔ)

    • 每個(gè)基于MEMORY存儲(chǔ)引擎的表實(shí)際對(duì)應(yīng)一個(gè)磁盤文件,該文件的文件名與表名相同,類型為.frm類型,該文件中只存儲(chǔ)表的結(jié)構(gòu),而其數(shù)據(jù)文件都是存儲(chǔ)在內(nèi)存中的。
    • 這樣有利于數(shù)據(jù)的快速處理,提高整個(gè)表的處理效率。
  • 缺點(diǎn):其數(shù)據(jù)易丟失,生命周期短。由于該缺陷,選擇MEMORY存儲(chǔ)引擎時(shí)需要特別小心。

使用Memory存儲(chǔ)引擎的場(chǎng)景

1.目標(biāo)數(shù)據(jù)較小,而且非常頻繁的進(jìn)行訪問(wèn),在內(nèi)存中存放數(shù)據(jù),如果太大的數(shù)據(jù)會(huì)造成內(nèi)存溢出??梢酝ㄟ^(guò)參數(shù)max_heap_table_size控制Memory表的大小,限制Memory表的最大值。

2.如果數(shù)據(jù)是臨時(shí)的,而且必須立即可用得到,那么就可以放在內(nèi)存中。

3.存儲(chǔ)在Memory表中的數(shù)據(jù)如果突然間丟失的話也沒(méi)有太大的關(guān)系。

4.7 Federated引擎:訪問(wèn)遠(yuǎn)程表

  • Federated引擎是訪問(wèn)其他MySQL服務(wù)器的一個(gè)代理,盡管該引擎看起來(lái)提供了一種很好的跨服務(wù)器的靈活性,但也經(jīng)常帶來(lái)問(wèn)題,因此默認(rèn)是禁用的。

4.8 Merge引擎:管理多個(gè)MyISAM表構(gòu)成的表集合

4.9 NDB引擎:MySQL集群專用存儲(chǔ)引擎

也叫做 NDB Cluster 存儲(chǔ)引擎,主要用于MySQL Cluster分布式集群 環(huán)境,類似于Oracle的 RAC 集群。

4.10 引擎對(duì)比

MySQL中同一個(gè)數(shù)據(jù)庫(kù),不同的表可以選擇不同的存儲(chǔ)引擎。如下表對(duì)常用存儲(chǔ)引擎做出了對(duì)比。

~代表不支持

特點(diǎn) MyISAM InnoDB Memory MERGE NDB
存儲(chǔ)限制 64TB 沒(méi)有
事務(wù)安全性 ~ 支持 ~ ~ ~
鎖機(jī)制 表鎖,即使操作一條記錄也會(huì)鎖住整個(gè)表,不適合高并發(fā)的操作 行鎖,操作時(shí)只鎖某一行,不對(duì)其它行有影響,適合高并發(fā)的操作。注意在使用update語(yǔ)句,而where條件中,沒(méi)有使用索引的話,行鎖,會(huì)升級(jí)為表鎖。 表鎖 表鎖 行鎖
B樹(shù)索引 支持 支持 支持 支持 支持
哈希索引 ~ ~ 支持 ~ 支持
全文索引 支持 ~ ~ ~ ~
集群索引 ~ 支持 ~ ~ ~
數(shù)據(jù)索引 ~ 支持 支持 ~ 支持
索引緩存 只緩存索引,不緩存真實(shí)數(shù)據(jù) 不僅緩存索引還要緩存真實(shí)數(shù)據(jù),對(duì)內(nèi)存要求較高,而且內(nèi)存大小對(duì)性能有決定性的影響 支持 支持 支持
數(shù)據(jù)可壓縮 支持 ~ ~ ~ ~
磁盤空間占用 N/A
內(nèi)存占用 中等
批量插入速度
支持外鍵 ~ 支持 ~ ~ ~

其實(shí)這些東西沒(méi)必要立即就給記住,列出來(lái)的目的就是表示不同的存儲(chǔ)引擎支持不同的功能。

其實(shí)我們最常用的就是InnoDBMyISAM,有時(shí)會(huì)提一下Memory。其中InnoDBMySQL默認(rèn)的存儲(chǔ)引擎。

5.MyISAM和InnoDB對(duì)比

對(duì)比項(xiàng) MyISAM InnoDB
外鍵 不支持 支持
事務(wù) 不支持 支持
行表鎖 表鎖,即使操作一條記錄也會(huì)鎖住整個(gè)表,不適合高并發(fā)操作 行鎖,如果只操作某一行,只鎖某一行,不對(duì)其他行有影響,適合高并發(fā)操作
緩存 只緩存索引,不緩存真實(shí)數(shù)據(jù) 不僅緩存索引,還緩存真實(shí)數(shù)據(jù),堆內(nèi)存要求較高,而且內(nèi)存大小對(duì)性能有決定性的影響
自帶系統(tǒng)表使用 Y N(在MySQL8.0后,也有系統(tǒng)表使用InnoDB引擎)
關(guān)注點(diǎn) 節(jié)省資源,消耗少,簡(jiǎn)單業(yè)務(wù) 事務(wù),高并發(fā),更大數(shù)據(jù)量
默認(rèn)安裝 Y Y
默認(rèn)使用 N Y

知識(shí)引入

1.InnoDB表的優(yōu)勢(shì)

InnoDB存儲(chǔ)引擎在實(shí)際應(yīng)用中擁有諸多優(yōu)勢(shì),比如操作便利、提高了數(shù)據(jù)庫(kù)的性能、維護(hù)成本低等。如果由于硬件或軟件的原因?qū)е路?/p>

務(wù)器崩潰,那么在重啟服務(wù)器之后不需要進(jìn)行額外的操作。InnoDB崩潰恢復(fù)功能自動(dòng)將之前提交的內(nèi)容定型,然后撤銷沒(méi)有提交的進(jìn)

程,重啟之后繼續(xù)從崩潰點(diǎn)開(kāi)始執(zhí)行。

InnoDB存儲(chǔ)引擎在主內(nèi)存中維護(hù)緩沖池,高頻率使用的數(shù)據(jù)將在內(nèi)存中直接被處理。這種緩存方式應(yīng)用于多種信息,加速了處理進(jìn)程。

在專用服務(wù)器上,物理內(nèi)存中高達(dá)80%的部分被應(yīng)用于緩沖池。如果需要將數(shù)據(jù)插入不同的表中,可以設(shè)置外鍵加強(qiáng)數(shù)據(jù)的完整性。更新

或者刪除數(shù)據(jù),關(guān)聯(lián)數(shù)據(jù)將會(huì)被自動(dòng)更新或刪除。如果試圖將數(shù)據(jù)插入從表,但在主表中沒(méi)有對(duì)應(yīng)的數(shù)據(jù),插入的數(shù)據(jù)將被自動(dòng)移除。如

果磁盤或內(nèi)存中的數(shù)據(jù)出現(xiàn)崩潰,在使用臟數(shù)據(jù)之前,校驗(yàn)和機(jī)制會(huì)發(fā)出警告。當(dāng)每個(gè)表的主鍵都設(shè)置合理時(shí),與這些列有關(guān)的操作會(huì)被

自動(dòng)優(yōu)化。插入、更新和刪除操作通過(guò)做改變緩沖自動(dòng)機(jī)制進(jìn)行優(yōu)化。InnoDB不僅支持當(dāng)前讀寫(xiě),也會(huì)緩沖改變的數(shù)據(jù)到數(shù)據(jù)流磁盤。

InnoDB的性能優(yōu)勢(shì)不只存在于長(zhǎng)時(shí)運(yùn)行查詢的大型表。在同一列多次被查詢時(shí),自適應(yīng)哈希索引會(huì)提高查詢的速度。使用InnoDB可以壓

縮表和相關(guān)的索引,可以在不影響性能和可用性的情況下創(chuàng)建或刪除索引。對(duì)于大型文本和BLOB數(shù)據(jù),使用動(dòng)態(tài)行形式,這種存儲(chǔ)布局更高

效。通過(guò)查詢INFORMATION_SCHEMA庫(kù)中的表可以監(jiān)控存儲(chǔ)引擎的內(nèi)部工作。在同一個(gè)語(yǔ)句中,InnoDB表可以與其他存儲(chǔ)引擎表混

用。即使有些操作系統(tǒng)限制文件大小為2GB,InnoDB仍然可以處理。當(dāng)處理大數(shù)據(jù)量時(shí),InnoDB兼顧C(jī)PU,以達(dá)到最大性能。

2.InnoDB和ACID模型

ACID模型是一系列數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)則,這些規(guī)則著重強(qiáng)調(diào)可靠性,而可靠性對(duì)于商業(yè)數(shù)據(jù)和任務(wù)關(guān)鍵型應(yīng)用非常重要。MySQL包含類似

InnoDB存儲(chǔ)引擎的組件,與ACID模型緊密相連,這樣出現(xiàn)意外時(shí),數(shù)據(jù)不會(huì)崩潰,結(jié)果不會(huì)失真。如果依賴ACID模型,可以不使用一致

性檢查和崩潰恢復(fù)機(jī)制。如果擁有額外的軟件保護(hù),極可靠的硬件或者應(yīng)用可以容忍一小部分的數(shù)據(jù)丟失和不一致,可以將MySQL設(shè)置

調(diào)整為只依賴部分ACID特性,以達(dá)到更高的性能。下面講解InnoDB存儲(chǔ)引擎與ACID模型相同作用的四個(gè)方面。

1. 原子方面 ACID的原子方面主要涉及InnoDB事務(wù),與MySQL相關(guān)的特性主要包括:

  • 自動(dòng)提交設(shè)置。
  • COMMIT語(yǔ)句。
  • ROLLBACK語(yǔ)句。
  • 操作INFORMATION_SCHEMA庫(kù)中的表數(shù)據(jù)。

2. 一致性方面 ACID模型的一致性主要涉及保護(hù)數(shù)據(jù)不崩潰的內(nèi)部InnoDB處理過(guò)程,與MySQL相關(guān)的特性

主要包括:

  • InnoDB雙寫(xiě)緩存。
  • InnoDB崩潰恢復(fù)。

3. 隔離方面 隔離是應(yīng)用于事務(wù)的級(jí)別,與MySQL相關(guān)的特性主要包括:

自動(dòng)提交設(shè)置。

  • SET ISOLATION LEVEL語(yǔ)句。
  • InnoDB鎖的低級(jí)別信息。

4. 持久性方面 ACID模型的耐久性主要涉及與硬件配置相互影響的MySQL軟件特性。由于硬件復(fù)雜多樣化,耐久性方面沒(méi)有具體的規(guī)則可循。與MySQL相關(guān)的特性有:

  • InnoDB雙寫(xiě)緩存,通過(guò)innodb_doublewrite配置項(xiàng)配置。
  • 配置項(xiàng)innodb_flush_log_at_trx_commit。
  • 配置項(xiàng)sync_binlog。
  • 配置項(xiàng)innodb_file_per_table。
  • 存儲(chǔ)設(shè)備的寫(xiě)入緩存。
  • 存儲(chǔ)設(shè)備的備用電池緩存。
  • 運(yùn)行MySQL的操作系統(tǒng)。
  • 持續(xù)的電力供應(yīng)。
  • 備份策略。
  • 對(duì)分布式或托管的應(yīng)用,最主要的在于硬件設(shè)備的地點(diǎn)以及網(wǎng)絡(luò)情況。

3.InnoDB架構(gòu)(了解)

1. 緩沖池 緩沖池是主內(nèi)存中的一部分空間,用來(lái)緩存已使用的表和索引數(shù)據(jù)。緩沖池使得經(jīng)常被使用的數(shù)據(jù)能夠直接在內(nèi)存中獲得,從而提高速度。

2. 更改緩存 更改緩存是一個(gè)特殊的數(shù)據(jù)結(jié)構(gòu),當(dāng)受影響的索引頁(yè)不在緩存中時(shí),更改緩存會(huì)緩存輔助索引頁(yè)的更改。索引頁(yè)被其他讀取操作時(shí)會(huì)加載到緩存池,緩存的更改內(nèi)容就會(huì)被合并。不同于集群索引,輔助索引并非獨(dú)一無(wú)二的。當(dāng)系統(tǒng)大部分閑置時(shí),清除操作會(huì)定期運(yùn)行,將更新的索引頁(yè)刷入磁盤。更新緩存合并期間,可能會(huì)大大降低查詢的性能。在內(nèi)存中,更新緩存占用一部分InnoDB緩沖池。在磁盤中,更新緩存是系統(tǒng)表空間的一部分。更新緩存的數(shù)據(jù)類型由innodb_change_buffering配置項(xiàng)管理。

3. 自適應(yīng)哈希索引 自適應(yīng)哈希索引將負(fù)載和足夠的內(nèi)存結(jié)合起來(lái),使得InnoDB像內(nèi)存數(shù)據(jù)庫(kù)一樣運(yùn)行,不需要降低事務(wù)上的性能或可靠性。這個(gè)特性通過(guò)innodb_adaptive_hash_index選項(xiàng)配置,或者通過(guò)--skip-innodb_adaptive_hash_index命令行在服務(wù)啟動(dòng)時(shí)關(guān)閉。

4. 重做日志緩存 重做日志緩存存放要放入重做日志的數(shù)據(jù)。重做日志緩存大小通過(guò)innodb_log_buffer_size配置項(xiàng)配置。重做日志緩存會(huì)定期地將日志文件刷入磁盤。大型的重做日志緩存使得大型事務(wù)能夠正常運(yùn)行而不需要寫(xiě)入磁盤。

5. 系統(tǒng)表空間 系統(tǒng)表空間包括InnoDB數(shù)據(jù)字典、雙寫(xiě)緩存、更新緩存和撤銷日志,同時(shí)也包括表和索引數(shù)據(jù)。多表共享,系統(tǒng)表空間被視為共享表空間。

6. 雙寫(xiě)緩存 雙寫(xiě)緩存位于系統(tǒng)表空間中,用于寫(xiě)入從緩存池刷新的數(shù)據(jù)頁(yè)。只有在刷新并寫(xiě)入雙寫(xiě)緩存后,InnoDB才會(huì)將數(shù)據(jù)頁(yè)寫(xiě)入合適的位置。

7. 撤銷日志 撤銷日志是一系列與事務(wù)相關(guān)的撤銷記錄的集合,包含如何撤銷事務(wù)最近的更改。如果其他事務(wù)要查詢?cè)紨?shù)據(jù),可以從撤銷日志記錄中追溯未更改的數(shù)據(jù)。撤銷日志存在于撤銷日志片段中,這些片段包含于回滾片段中。

8. 每個(gè)表一個(gè)文件的表空間 每個(gè)表一個(gè)文件的表空間是指每個(gè)單獨(dú)的表空間創(chuàng)建在自身的數(shù)據(jù)文件中,而不是系統(tǒng)表空間中。這個(gè)功能通過(guò)innodb_file_per_table配置項(xiàng)開(kāi)啟。每個(gè)表空間由一個(gè)單獨(dú)的.ibd數(shù)據(jù)文件代表,該文件默認(rèn)被創(chuàng)建在數(shù)據(jù)庫(kù)目錄中。

9. 通用表空間 使用CREATE TABLESPACE語(yǔ)法創(chuàng)建共享的InnoDB表空間。通用表空間可以創(chuàng)建在MySQL數(shù)據(jù)目錄之外能夠管理多個(gè)表并支持所有行格式的表。

10. 撤銷表空間 撤銷表空間由一個(gè)或多個(gè)包含撤銷日志的文件組成。撤銷表空間的數(shù)量由innodb_undo_tablespaces配置項(xiàng)配置。

11. 臨時(shí)表空間 用戶創(chuàng)建的臨時(shí)表空間和基于磁盤的內(nèi)部臨時(shí)表都創(chuàng)建于臨時(shí)表空間。innodb_temp_data_file_path配置項(xiàng)定義了相關(guān)的路徑、名稱、大小和屬性。如果該值為空,默認(rèn)會(huì)在innodb_data_home_dir變量指定的目錄下創(chuàng)建一個(gè)自動(dòng)擴(kuò)展的數(shù)據(jù)文件。

12. 重做日志 重做日志是基于磁盤的數(shù)據(jù)結(jié)構(gòu),在崩潰恢復(fù)期間使用,用來(lái)糾正數(shù)據(jù)。正常操作期間,重做日志會(huì)將請(qǐng)求數(shù)據(jù)進(jìn)行編碼,這些請(qǐng)求會(huì)改變InnoDB表數(shù)據(jù)。遇到意外崩潰后,未完成的更改會(huì)自動(dòng)在初始化期間重新進(jìn)行。

只是為了記錄自己的學(xué)習(xí)歷程,且本人水平有限,不對(duì)之處,請(qǐng)指正。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-855048.html

到了這里,關(guān)于MySQL-05.存儲(chǔ)引擎的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL——存儲(chǔ)引擎

    MySQL——存儲(chǔ)引擎

    MySQL數(shù)據(jù)庫(kù)主要的存儲(chǔ)引擎:? ? ? ? MyISAM是MySQL的默認(rèn)數(shù)據(jù)庫(kù)引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的順序訪問(wèn)方法)所改良。雖然性能極佳,而且提供了大量的特性,包括全文索引、壓縮、空間函數(shù)等,但MyISAM不支持事務(wù)和行級(jí)鎖,而且最大

    2024年02月09日
    瀏覽(23)
  • Mysql高級(jí)1-存儲(chǔ)引擎

    Mysql高級(jí)1-存儲(chǔ)引擎

    ? 1.1、連接層 最上層是一個(gè)客戶端和鏈接服務(wù),主要完成一些類似于鏈接處理,授權(quán)認(rèn)證,及相關(guān)的安全方案,服務(wù)器也會(huì)為安全接入的而每個(gè)客戶端驗(yàn)證它所具有的操作權(quán)限 1.2、服務(wù)層 第二層架構(gòu)主要完成大多數(shù)的核心服務(wù)功能,如SQL接口,并完成緩存的查詢,SQL的分析

    2024年02月16日
    瀏覽(18)
  • MySQL—存儲(chǔ)引擎(下)

    MySQL—存儲(chǔ)引擎(下)

    ?? 作者:小劉在C站 ?? 個(gè)人主頁(yè): 小劉主頁(yè) ?? 每天分享云計(jì)算網(wǎng)絡(luò)運(yùn)維課堂筆記,努力不一定有回報(bào),但一定會(huì)有收獲加油!一起努力,共赴美好人生! ?? 樹(shù)高千尺,落葉歸根人生不易,人間真情 前言 上一章講了存儲(chǔ)引擎,本章繼續(xù),從特點(diǎn)開(kāi)始 目錄 MySQL 1.存

    2024年02月07日
    瀏覽(16)
  • MySQL—存儲(chǔ)引擎(上)

    MySQL—存儲(chǔ)引擎(上)

    ?? 作者:小劉在C站 ?? 個(gè)人主頁(yè): 小劉主頁(yè) ?? 每天分享云計(jì)算網(wǎng)絡(luò)運(yùn)維課堂筆記,努力不一定有回報(bào),但一定會(huì)有收獲加油!一起努力,共赴美好人生! ?? 樹(shù)高千尺,落葉歸根人生不易,人間真情 目錄 1). 連接層 2). 服務(wù)層 3). 引擎層 4). 存儲(chǔ)層 存儲(chǔ)引擎介紹 1

    2024年02月07日
    瀏覽(21)
  • mysql索引、事務(wù)、存儲(chǔ)引擎

    索引的概念: 索引是一個(gè)排序的列表,在這個(gè)列表中存儲(chǔ)著索引的值和包含這個(gè)值的數(shù)據(jù)所在行的物理地址(類似于C語(yǔ)言的鏈表通過(guò)指針指向數(shù)據(jù)記錄的內(nèi)存地址)。 使用索引后可以不用掃描全表來(lái)定位某行的數(shù)據(jù),而是先通過(guò)索引表找到該行數(shù)據(jù)對(duì)應(yīng)的物理地址然后訪問(wèn)

    2024年02月10日
    瀏覽(29)
  • MySQL事務(wù)與存儲(chǔ)引擎

    MySQL事務(wù)與存儲(chǔ)引擎

    是一種機(jī)制、一個(gè)操作序列,包含了一組數(shù)據(jù)庫(kù)操作命令,并且把所有的命令作為一個(gè)整體一起向系統(tǒng)提交或撤銷操作請(qǐng)求u,即這一組數(shù)據(jù)庫(kù)命令要么都執(zhí)行,要么都不執(zhí)行 是一個(gè)不可分割的工作邏輯單元,在數(shù)據(jù)庫(kù)系統(tǒng)上執(zhí)行并發(fā)操作,事務(wù)是最小的控制單元 適用于多用

    2024年02月09日
    瀏覽(30)
  • MySQL的存儲(chǔ)引擎

    MyISAM:這種引擎是mysql最早提供的。這種引擎又可以分為靜態(tài)MyISAM、動(dòng)態(tài)MyISAM 和壓縮MyISAM三種,不管是何種MyISAM表,目前它都不支持事務(wù),行級(jí)鎖和外鍵約束的功能。 MyISAM Merge引擎:這種類型是MyISAM類型的一種變種。合并表是將幾個(gè)相同的MyISAM表合并為一個(gè)虛表。常應(yīng)用于日

    2024年02月17日
    瀏覽(27)
  • MySQL存儲(chǔ)引擎概述

    MySQL存儲(chǔ)引擎概述

    前言:MySQL語(yǔ)句執(zhí)行流程為:SQL語(yǔ)句→查詢緩存→解析器→優(yōu)化器→執(zhí)行器(執(zhí)行器會(huì)調(diào)用執(zhí)行引擎API);人們把“連接管理、查詢緩存、語(yǔ)法解析、查詢優(yōu)化”這些并不涉及真實(shí)數(shù)據(jù)存儲(chǔ)的功能劃分為MySQL server的功能,把真實(shí)存取數(shù)據(jù)的功能劃分為存儲(chǔ)引擎的功能。索引M

    2024年02月08日
    瀏覽(20)
  • MySQL 事務(wù)與存儲(chǔ)引擎

    MySQL 事務(wù)與存儲(chǔ)引擎

    目錄 一、MySQL事務(wù)的概念 二、事務(wù)的ACID特點(diǎn) 2.1 原子性 2.2 一致性 2.3 隔離性? 2.4 持久性 2.5 事務(wù)之間的相互影響? 三、Mysql及事物隔離級(jí)別 3.1?查詢?nèi)质聞?wù)隔離級(jí)別? 3.2?查詢會(huì)話事務(wù)隔離級(jí)別?? 3.3?設(shè)置全局事務(wù)隔離級(jí)別?? 3.4?設(shè)置會(huì)話事務(wù)隔離級(jí)別?? 四、事務(wù)控制語(yǔ)

    2024年02月16日
    瀏覽(26)
  • 【MySQL高級(jí)】——存儲(chǔ)引擎

    【MySQL高級(jí)】——存儲(chǔ)引擎

    1. 命令方式 2. 配置文件方式 修改配置文件my.cnf 重啟服務(wù) ??存儲(chǔ)引擎是負(fù)責(zé)對(duì)表中的數(shù)據(jù)進(jìn)行提取和寫(xiě)入工作的,我們可以為不同的表設(shè)置不同的存儲(chǔ)引擎 ,也就是說(shuō)不同的表可以有不同的物理存儲(chǔ)結(jié)構(gòu),不同的提取和寫(xiě)入方式。 MySQL從3.23.34a開(kāi)始就包含InnoDB存儲(chǔ)引擎。大

    2023年04月26日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包