MySQL存儲引擎MyISAM和InnoDB

MySQL存儲引擎MyISAM和InnoDB

存儲引擎

  • 在MySQL中的數據擁有各種不同的技術存儲文件或內存中。這些技術中的每一種技術都使用不同的存儲機制、索引技巧、鎖定水平並且最終提供廣泛的不用的功能和能力。通過選擇不同的技術,能夠獲得額外的速度或者功能,從而改善應用的整體功能。這些不同的技術以及配套的相關功能在MySQL中被稱之爲存儲引擎。

MyISAM存儲引擎

  • MyISAM存儲引擎是MySQL關係數據庫系統5.5版本之前默認的存儲引擎。
特點

1、不支持事務

2、表級鎖定形式,數據在更新時鎖定整個表

3、數據庫在讀寫過程中相互堵塞:

  • 1)、在數據寫入的過程中阻塞用戶讀數據的讀取
  • 2)、在數據讀取的過程中阻塞用戶寫入數據

4、可以通過key_buffer_size來設置緩存索引,提高訪問的性能,減少磁盤IO的壓力

5、採用MyISAM存儲引擎進行行數據單獨寫入或讀取,速度較塊且佔用資源相對較少

6、MyISAM存儲引擎不支持外鍵約束,只支持全文索引

7、每個MyISAM在磁盤上存儲成三個文件,每一個的名字均以表的名字開始,擴展名指出文件類型:

  • 1)、.frm 文件存儲表定義。
  • 2)、數據文件的擴展名爲:.MYD(MYData)。
  • 3)、索引文件的擴展名爲:.MYI(MYIndex)。

InnoDB存儲引擎

特點

1、支持事物

2、行級鎖定,但是全盤掃描仍然會是表級鎖定。

3、讀寫阻塞與事務隔離級別相關

4、具有非常高效的緩存特性,能緩存索引,也能緩存數據

5、表與主鍵以簇的方式存儲

6、支持分區、表空間,類似Oracle數據庫

7、支持外鍵約束,

8、適合對硬件資源要求比較高的場合

配置合適的存儲引擎

1、查看MySQL默認使用的存儲引擎

mysql -u root -p #進入MySQL

show engines; #查看默認存儲引擎

MySQL存儲引擎MyISAM和InnoDB

2、查看錶存儲引擎類型
  • 使用 show table status 命令查看:

mysql -u root -p

show table status from test where name='test'; #查看test數據庫中的test表的存儲引擎類型

MySQL存儲引擎MyISAM和InnoDB

  • 使用show create 查看錶存儲引擎類型:

mysql -u root -p

use test; #使用test數據庫

show create table test; #查看test表的存儲引擎類型

MySQL存儲引擎MyISAM和InnoDB

3、修改存儲引擎
  • 使用 alter table命令修改(只能修改已存在的表):

mysql -u root -p

use test;

alter table test engine=MyISAM; #修改test表的存儲引擎類型

show create table test;

MySQL存儲引擎MyISAM和InnoDB

  • 修改MySQL的配置文件my.cnf,可以指定defaut-storage-engine選項設置默認的存儲引擎(只試用於新創建的表,已存在表的存儲引擎類型不變):

vim /etc/my.cnf #編輯配置文件

#省略內容
[mysqld]
default-storage-engines=MyISAM
#省略內容

systemctl restart mysqld.service #重啓MySQL服務

  • 使用create table創建表時用engine指定存儲引擎(現在數據庫的默認存儲引擎爲MyISAM);

mqsql -u root -p

use test;

create table test01(id int) engine=InnoDB; #創建存儲引擎爲InnoDB的表

show create table test01;

MySQL存儲引擎MyISAM和InnoDB

  • 使用mysql_convert_table_format命令可以批量轉換存儲引擎(只使用於MySQL5.5版本);

yum install prel-DBI -y

yum install prel-BDB-MySQL -y #安裝perl對MySQL的模塊操作

mysql_convert_table_format --user=root --password=密碼 --socket=/temp/mysql.sock --engine=MyISAM test test

但當使用此命令將存儲引擎類型更改爲InnoDB時,會出現報錯,所以需要修改其命令的腳本文件

vim /use/local/mysql/bin/mysql_convert_table_format

#省略內容
"e|engine|type=s"   =>\$opt_engine, #將32行中的\$opt_type更改爲\$opt_engine
#省略內容 

重新使用命令即可

mysql_convert_table_format --user=root --password=密碼 --socket=/temp/mysql.sock --engine=InnoDB test test

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章