第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 MySQL 進(jìn)階教程 MySQL 進(jìn)階教程 MyISAM、Memory、TokuDB等其余引擎

MyISAM、Memory、TokuDB 等其余存儲引擎

緊接上一小節(jié),本小節(jié)重點(diǎn)介紹 MyISAM、Memory、TokuDB 的特性。

1. MyISAM

在 MySQL 5.5 之前的版本,MyISAM 是默認(rèn)的存儲引擎。MyISAM 提供了全文索引、壓縮、空間函數(shù)(GIS)等特性,但 MyISAM 不支持事務(wù)和行級鎖,而且 MyISAM 沒有 crash-safe 的能力。MySQL 5.6之后,MyISAM已經(jīng)越來越少被使用。

Tips: crash-safe 指數(shù)據(jù)庫發(fā)生故障重啟,之前提交的數(shù)據(jù)不會丟失。

1.1 MyISAM特性

  • 加鎖與并發(fā)

MyISAM 可以對整張表加鎖,而不是針對行。讀數(shù)時(shí)會對表加共享鎖,寫入時(shí)對表加排它鎖。在表有讀取查詢的同時(shí),也可以對表進(jìn)行插入數(shù)據(jù)。

  • 延遲更新索引鍵

創(chuàng)建 MyISAM 表時(shí),可以指定 DELAY_KEY_WRITE 選項(xiàng),在每次更新完成時(shí),不會馬上將更新的索引數(shù)據(jù)寫入磁盤,而是先寫到內(nèi)存中的鍵緩沖區(qū),當(dāng)清理鍵緩沖區(qū)或關(guān)閉表的時(shí)候,才將對應(yīng)的索引塊寫入磁盤。這種方式可以極大地提升寫入性能。

  • 壓縮

可以使用 myisampack 工具對 MyISAM 表進(jìn)行壓縮。壓縮表可以極大地減少磁盤空間使用,從而減少磁盤 IO,提升查詢性能。壓縮表時(shí)不能進(jìn)行數(shù)據(jù)的修改。表中的記錄是獨(dú)立壓縮的,讀取單行時(shí),不需要解壓整個(gè)表。

一般來說,如果數(shù)據(jù)在插入之后,不再進(jìn)行修改,這種表比較適合進(jìn)行壓縮,如日志記錄表、流水記錄表。

  • 修復(fù)

針對 MyISAM 表,MySQL 可以手工或自動執(zhí)行檢查和修復(fù)操作。執(zhí)行表的修復(fù)可能會導(dǎo)致丟失一些數(shù)據(jù),而且整個(gè)過程非常緩慢。

可以通過check table xxx檢查表的錯(cuò)誤,如果有錯(cuò)誤,則通過repair table xxx進(jìn)行修復(fù)。在 MySQL 服務(wù)器關(guān)閉的情況下,也可以通過 myisamchk 命令行工具進(jìn)行檢查和修復(fù)操作。

mysql> create table t1(
    ->     c1 int not null,
    ->     c2 varchar(10) default null
    -> ) engine = myisam;
Query OK, 0 rows affected (0.06 sec)

mysql> check table t1;
+-----------+-------+----------+----------+
| Table     | Op    | Msg_type | Msg_text |
+-----------+-------+----------+----------+
| tempdb.t1 | check | status   | OK       |
+-----------+-------+----------+----------+
1 row in set (0.00 sec)

mysql> repair table t1;
+-----------+--------+----------+----------+
| Table     | Op     | Msg_type | Msg_text |
+-----------+--------+----------+----------+
| tempdb.t1 | repair | status   | OK       |
+-----------+--------+----------+----------+
1 row in set (0.00 sec)

1.2 存儲方式

MyISAM 在磁盤中存儲成 3 個(gè)文件,文件名和表名相同

  • .frm-存儲表定義 ;
  • .MYD-存儲數(shù)據(jù);
  • .MYI-存儲索引。

下面為 MyISAM 表的創(chuàng)建語句,及相應(yīng)的數(shù)據(jù)文件:

mysql> create table a (id int) ENGINE = MyISAM;
Query OK, 0 rows affected (0.01 sec)

[root@mysql-test-1 tempdb]# ls -lrt a.*
-rw-r----- 1 mysql mysql 8556 Apr 13 02:01 a.frm
-rw-r----- 1 mysql mysql 1024 Apr 13 02:01 a.MYI
-rw-r----- 1 mysql mysql    0 Apr 13 02:01 a.MYD

2. Memory

Memory 使用內(nèi)存中的內(nèi)容來創(chuàng)建表,每個(gè) Memory 表只有一個(gè) .frm 文件。如果需要快速訪問數(shù)據(jù),并且數(shù)據(jù)不會被修改,丟失也沒有關(guān)系,使用 Memory 是非常適合的。而且 Memory 表支持 Hash 索引,查找操作非???。

即便如此,Memory 表也無法取代基于磁盤的表

  • Memory 表是表級鎖,并發(fā)寫的性能較差;
  • 不支持BLOB或TEXT類型的列,并且每行的長度是固定的,即使指定了varchar列,實(shí)際存儲也會使用char列。

一般來說,Memory 表比較適合以下場景:

  • 用于查找或映射表,如郵編、省市區(qū)等變化不頻繁的表;
  • 用于緩存周期性聚合數(shù)據(jù)的表;
  • 用于統(tǒng)計(jì)操作的中間結(jié)果表。

3. TokuDB

除了 MySQL 自帶的存儲引擎之外,還有一些常見的第三方存儲引擎,如列式存儲引擎 Infobright、高寫性能和高壓縮的 TokuDB。TokuDB 是一個(gè)高效寫入、高壓縮率、高擴(kuò)展性、支持事務(wù)處理的存儲引擎,最新的版本可以在 Percona Server for MySQL 中使用。

下圖是官方給出的 TokuDB 與 InnoDB 的對比:
圖片描述

官方給出的 TokuDB 與 InnoDB 的對比

一般來說,TokuDB比較適用以下場景:

  • 訪問頻率不高的數(shù)據(jù)或歷史數(shù)據(jù)歸檔;
  • 數(shù)據(jù)表非常大并且時(shí)不時(shí)還需要進(jìn)行DDL操作。

4. 小結(jié)

本節(jié)主要學(xué)習(xí)了 MyISAM、Memory、TokuDB 這三種存儲引擎。本節(jié)課程的重點(diǎn)如下:

  • MyISAM 的特性主要包括:加鎖與并發(fā)、延遲更新索引鍵、壓縮和修復(fù)等;
  • Memory 查找數(shù)據(jù)的效率非常高,但是寫的性能很差;
  • TokuDB 屬于第三方存儲引擎,擁有高寫性能和高壓縮的特性。