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

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

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

多存儲引擎是 MySQL 有別于其他數(shù)據(jù)庫的最大特點,不同的存儲引擎有不同的特點,可以應對不同的應用場景,這給了我們足夠的靈活性去做出選擇。但同時也帶來了煩惱,這么多的存儲引擎,我們該如何選擇最合適的呢?本文將結(jié)合實際應用,介紹選擇存儲引擎的一般原則。

1.需要考慮的因素

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

確實,大部分情況下,InnoDB 都是最好的選擇,從 MySQL 5.5 版本開始,將 InnoDB 作為默認存儲引擎這一點就是最好的佐證。

選擇不同的存儲引擎,需要考慮以下幾個因素:

  • 事務

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

  • 備份

如果需要在線熱備,那么應該考慮 InnoDB。如果可以定期關(guān)閉服務器進行冷備,那么備份這個因素可以忽略掉。

  • 崩潰恢復

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

一般來講,如果應用場景特別復雜,以至于搞不清楚需求,無法確定應該使用哪種存儲引擎,那么就使用 InnoDB 吧,這是比較安全的選擇。

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

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

2.1 alter table

下面語句將表 t1 的存儲引擎修改為 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í)行比較長的時間,它是將原表復制到一張新的表中,同時原表加上讀鎖,復制期間會耗費大量的 IO,所以一般在應用空閑時,才可進行 alter table 操作。

2.2 導出導入

使用 mysqldump 工具將數(shù)據(jù)導出至文件,修改文件中 create table 語句的存儲引擎選項,同時修改表名,再通過 source 命令進行導入操作。

mysql> source table_new_engine.sql

2.3 create和select

這種方法先創(chuàng)建一個新的存儲引擎表,再通過 insert xxx select xxx 語法導入數(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é)主要學習了選擇合適的存儲引擎需要考慮的三個因素:事務、備份和崩潰恢復,同時還學習了轉(zhuǎn)換存儲引擎的三種方法:alter table、導出導入、create和select。

以一句話來總結(jié)如何選擇合適的存儲引擎:當你搞不清楚無法做出選擇時,InnoDB 是最好的選擇。