MySQL存儲引擎MyISAM與InnoDB
阿新 • • 發佈:2018-07-04
var 應用 usr 指定 ket type inf 數據讀取 code 存儲引擎的實質就是如何實現存儲數據,為存儲數據建立索引以及查詢、更改、刪除數據等技術實現的方法。
- MySQL支持插件式的表存儲引擎,這種獨有的插件式體系架構,讓存儲引擎有了依賴應用的多樣性。其中較為知名的存儲引擎為MyISAM與InnoDB.
- MySQL系統中,存儲引擎處於文件系統之上,在數據保存到數據文件之前會先傳輸到存儲引擎,然後按照各個存儲引擎的存儲格式進行數據存儲。使用這種存儲引擎的主要優點在於,僅僅需要提供特殊應用的特性即可;數據庫中的系統開銷較小,更具有有效和高效的數據庫性能。
MyISAM存儲引擎特點
- 1、不支持事務處理,需要事務支持的系統不能使用MyISAM作為存儲引擎
- 2、表級鎖定形式,數據在更新時會鎖定整個表。
- 3、數據庫在讀寫的過程中相互阻塞:
在數據寫入的過程中阻塞用戶對數據的讀取;
在數據讀取的過程中阻塞用戶寫入數據; - 4、可以通過key_buffer_size來設置緩存索引,提高訪問的性能,減少磁盤IO的壓力。
- 5、采用MyISAM存儲引擎不支持外鍵約束,只支持全文索引。
- 6、采用MyISAM存儲引擎進行數據單獨寫入或者讀取,速度較快且占用資源相對要少。
- 7、MyISAM存儲的文件類型:
.frm 文件存儲表定義;
數據文件擴展名為.MYD(MYDATA);
索引文件擴展名為.MYI(MYIndex);
InnoDB存儲引擎特點
- 1、支持事務處理,支持四個事務隔離級別。
- 2、行級鎖定,但是全表掃描時會鎖定整個表。
- 3、讀寫阻塞與事務隔離級別相關。
- 4、具有非常高效的緩存特性,能緩存索引,也能緩存數據。
- 5、表與主鍵以簇的方式存儲。
- 6、支持分區、表空間,類似oracle數據庫。
- 7、支持外鍵約束,MySQL5.5以前不支持全文索引,後面的版本支持。
- 8、適合對硬件資源要求較高的場合。
存儲引擎的更改與選擇方式
- 查看數據庫使用的存儲引擎方法:
show table status from school where name=‘info‘;
或者:
show create table info;
配置存儲引擎的幾種方式:
- 1、使用alter table命令修改:
(修改現有表的存儲引擎)
alter table info engine=MyISAM/InnoDB; //進入數據庫操作
- 2、修改默認存儲引擎:
(針對後面新創建的表格起作用)
#vim /etc/my.cnf
default-storage-engine=MyISAM/InnoDB //在[mysql]服務欄下設置默認存儲引擎
- 3、在創建表時指定使用的存儲引擎種類: //在mysql模式下
create table test(name varchar(10)) engine=InnoDB;
show create table test;
- 4、mysql_convert_table_format命令可以批量轉換存儲引擎
註:此種工具使用只能存在於MySQL5.5版本以前。
yum install perl-DBI perl-DBD-MySQL -y //安裝操作運行庫
默認情況下只能將已存在的InnoDB的存儲引擎更改為MyISAM形式,若需要反過來更改需要更改命令執行腳本:
vim /usr/local/mysql/bin/mysql_convert_table_format
(第四種同時更改多表的存儲引擎為在MySQL5.5版本為例)
$opt_help=$opt_version=$opt_verbose=$opt_force=0;
$opt_user=$opt_database=$opt_password=undef;
$opt_host="localhost";
$opt_socket="";
$opt_engine="MYISAM";
$opt_port=0;
$exit_status=0;
GetOptions(
"e|engine|type=s" => \$opt_type, //32行,type更改為engine即可
"f|force" => \$opt_force,
"help|?" => \$opt_help,
"h|host=s" => \$opt_host,
"p|password=s" => \$opt_password,
"u|user=s" => \$opt_user,
"v|verbose" => \$opt_verbose,
"V|version" => \$opt_version,
"S|socket=s" => \$opt_socket,
"P|port=i" => \$opt_port
然後用:(Linux模式下利用該命令)
mysql_convert_table_format --host=localhost --user=root --password=abc123 --socket=/tmp/mysql.socket --engine=InnoDB school test01 test02
--host=localhost //表示本地數據庫
--user=root //表示登錄用戶
--password=abc123 //表示登錄密碼
--socket=/tmp/mysql.socket //指定socket目錄
--engine-InnoDB //需要更改後的存儲引擎
school //指定需要更改的庫
test01 test02 //需要同時更改的表
可以同時更改test01 test02多個表的存儲引擎。
MySQL存儲引擎MyISAM與InnoDB