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

全部開(kāi)發(fā)者教程

MySQL 進(jìn)階教程

首頁(yè) 慕課教程 MySQL 進(jìn)階教程 MySQL 進(jìn)階教程 如何根據(jù)業(yè)務(wù)選擇合適的存儲(chǔ)引擎?

如何根據(jù)業(yè)務(wù)選擇合適的存儲(chǔ)引擎?

多存儲(chǔ)引擎是 MySQL 有別于其他數(shù)據(jù)庫(kù)的最大特點(diǎn),不同的存儲(chǔ)引擎有不同的特點(diǎn),可以應(yīng)對(duì)不同的應(yīng)用場(chǎng)景,這給了我們足夠的靈活性去做出選擇。但同時(shí)也帶來(lái)了煩惱,這么多的存儲(chǔ)引擎,我們?cè)撊绾芜x擇最合適的呢?本文將結(jié)合實(shí)際應(yīng)用,介紹選擇存儲(chǔ)引擎的一般原則。

1.需要考慮的因素

對(duì)于如何選擇存儲(chǔ)引擎,可以簡(jiǎn)單地歸納為一句話(huà):“除非需要用到某些 InnoDB 不具備的特性,并且沒(méi)有其他辦法可以替代,否則都應(yīng)該優(yōu)先選擇 InnoDB 引擎”(摘錄自高性能MySQL第三版)。

確實(shí),大部分情況下,InnoDB 都是最好的選擇,從 MySQL 5.5 版本開(kāi)始,將 InnoDB 作為默認(rèn)存儲(chǔ)引擎這一點(diǎn)就是最好的佐證。

選擇不同的存儲(chǔ)引擎,需要考慮以下幾個(gè)因素:

  • 事務(wù)

如果應(yīng)用場(chǎng)景需要事務(wù)支持,那么毫無(wú)疑問(wèn),InnoDB是目前最穩(wěn)定的選擇。如果不需要考慮事務(wù),并且應(yīng)用主要以讀操作和插入操作為主,極少有更新和刪除操作,那么MyISAM是比較好的選擇,這種一般指日志型應(yīng)用。

  • 備份

如果需要在線(xiàn)熱備,那么應(yīng)該考慮 InnoDB。如果可以定期關(guān)閉服務(wù)器進(jìn)行冷備,那么備份這個(gè)因素可以忽略掉。

  • 崩潰恢復(fù)

MyISAM 在崩潰后,發(fā)生數(shù)據(jù)損壞的概率比 InnoDB 高很多,而且恢復(fù)速度也很慢,這也是很多人開(kāi)始棄用 MyISAM 的主要原因之一。特別是數(shù)據(jù)量比較大的應(yīng)用場(chǎng)景,數(shù)據(jù)庫(kù)崩潰后,是否能快速恢復(fù)是一個(gè)非常重要的因素。

一般來(lái)講,如果應(yīng)用場(chǎng)景特別復(fù)雜,以至于搞不清楚需求,無(wú)法確定應(yīng)該使用哪種存儲(chǔ)引擎,那么就使用 InnoDB 吧,這是比較安全的選擇。

2. 轉(zhuǎn)換表的存儲(chǔ)引擎

下面介紹轉(zhuǎn)換存儲(chǔ)引擎的三種方法:

2.1 alter table

下面語(yǔ)句將表 t1 的存儲(chǔ)引擎修改為 InnoDB:

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

mysql> alter table t1 engine = innodb;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table t1\G;
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `c1` int(11) NOT NULL,
  `c2` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

alter table 的操作需要執(zhí)行比較長(zhǎng)的時(shí)間,它是將原表復(fù)制到一張新的表中,同時(shí)原表加上讀鎖,復(fù)制期間會(huì)耗費(fèi)大量的 IO,所以一般在應(yīng)用空閑時(shí),才可進(jìn)行 alter table 操作。

2.2 導(dǎo)出導(dǎo)入

使用 mysqldump 工具將數(shù)據(jù)導(dǎo)出至文件,修改文件中 create table 語(yǔ)句的存儲(chǔ)引擎選項(xiàng),同時(shí)修改表名,再通過(guò) source 命令進(jìn)行導(dǎo)入操作。

mysql> source table_new_engine.sql

2.3 create和select

這種方法先創(chuàng)建一個(gè)新的存儲(chǔ)引擎表,再通過(guò) insert xxx select xxx 語(yǔ)法導(dǎo)入數(shù)據(jù)

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

mysql> create table t1_innodb like t1;
Query OK, 0 rows affected (0.01 sec)

mysql> alter table t1_innodb engine = innodb;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into t1_innodb select * from t1;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table t1_innodb\G;
*************************** 1. row ***************************
       Table: t1_innodb
Create Table: CREATE TABLE `t1_innodb` (
  `c1` int(11) NOT NULL,
  `c2` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

3. 小結(jié)

本節(jié)主要學(xué)習(xí)了選擇合適的存儲(chǔ)引擎需要考慮的三個(gè)因素:事務(wù)、備份和崩潰恢復(fù),同時(shí)還學(xué)習(xí)了轉(zhuǎn)換存儲(chǔ)引擎的三種方法:alter table、導(dǎo)出導(dǎo)入、create和select。

以一句話(huà)來(lái)總結(jié)如何選擇合適的存儲(chǔ)引擎:當(dāng)你搞不清楚無(wú)法做出選擇時(shí),InnoDB 是最好的選擇。