超詳細MySQL常用數據庫引擎
MySQL中的數據用各種不同的技術存儲在文件中,每一種技術都使用不同的存儲機制、索引技巧、鎖定水平並最終提供不同的功能和能力,這些不同的技術以及配套的功能在MySQL中稱為存儲引擎。存儲引擎就是MySQL將數據存儲在文件西永中的存儲方式或者存儲格式。MySQL存儲引擎就是MySQL數據庫服務器中的組件,負責為數據庫執行時機的數據I/O操作。使用特殊存儲引擎的主要有點之一在於,僅需提供特殊應用所需的特性,數據庫中的系統開銷較小,具有更有效和更高的數據庫性能。MySQL系統中,存儲引擎處於文件系統之上,在數據保存到數據文件之前會傳輸到存儲引擎,之後按照各個存儲引擎的存儲格式進行存儲
常見存儲引擎
- MyISAM
- InnoDB
MyISAM特點
1.不支持事務
2.表級鎖定形式,數據在更新時鎖定整個表
3.數據庫在讀寫過程中相互阻塞
在數據寫入的過程阻塞用戶數據的讀取
在數據讀取的過程中阻塞用戶的數據寫入
4.過key_buffer_size來設置緩存索引,提高訪問性能,減少磁盤IO的壓力
5.MyISAM存儲引擎數據單獨寫入或讀取,速度過程較快且占用資源相對少
6.ISAM存儲引擎不支持外鍵約束,只支持全文索引
7.MyISAM在磁盤上存儲成三個文件,每一個文件的名字以表的名字開始,擴展名指出文件類型:
.frm文件存儲表定義 #表頭、屬性等等
數據文件的擴展名.MYD(MYData)
索引文件的擴展名為.MYI(MYIndex)
MyISAM適用的生產場景舉例
1.公司業務不需要事務的支持
2.一般單方面讀取數據比較多的業務,或單方面寫入數據比較多的業務,因為MyISAM具有讀寫互相阻塞的特點,數據讀寫比較頻繁的場景不適合使用
3.MyISAM存儲引擎數據讀寫都比較頻繁場景不合適
4.使用讀寫並發訪問相對較低的業務
5數據修改相對較少的業務
6.對數據業務一致性要求不是非常高的業務
7.服務器硬件資源相對比較差
InnoDB特點
1.事務,支持四個事務隔離級別
2.鎖定,但是全表掃描仍然會是表級鎖定
3.阻塞與事務隔離級別相關
4.非常高效的緩存特性,能緩存索引,也能緩存數據
5.主鍵以簇的方式存儲
6.分區、表空間、類似Oracle數據庫7.外鍵約束,5.5.之前不支持全文索引,5.5版本以後支持全文索引
8.件資源要求還是比較高的場合
InnoDB適用生產場景分析
1.業務需要事務的支持
2.行級鎖定對並發有很好的適應能力,但需確保查詢是通過索引來完成
3.業務數據更新較為頻繁的場景,如:論壇,微博等
4.業務數據一致性要求較高,例如:銀行業務
5.硬件設備內存較大,利用Innodb較好的緩存能力來提高內存利用率,減少磁盤IO的壓力
配置合適的存儲引擎
1、查看數據庫可配置的存儲引擎類型
2、查看表正在使用的存儲引擎
1).使用show table status命令查看表正在使用的存儲引擎
mysql> show table status from school where name=‘student‘\G;
school:指定當前的庫
student:指定當前的表
2).使用show create命令查看表正在使用的存儲引擎
mysql> use school; #進入數據庫
mysql> show create table student;
3、修改存儲引擎
1).方法1:使用alter table命令修改
mysql> use school
mysql> alter table student engine=MyISAM;
mysql> show create table student\G;
2).方法2:修改my.cnf主配置文件,指定默認存儲引擎
[root@redhat7_5 ~]# vim /etc/my.cnf
[mysqld]標簽中添加以下參數
[mysqld]
default-storage-engine=MyISAM
[root@redhat7_5 ~]# systemctl restart mysqld.service #重啟服務
mysql> use school
mysql> create table teacher(id int not null primary key auto_increment,tname varchar(10));
mysql> show create table teacher\G;
3).方法3:create table創建表時指定存儲引擎
mysql> use school
mysql> create table class(id int ,cname varchar(20)) engine=InnoDB; #創建庫,指定引擎InnoDB
mysql> show create table class\G;
4).5.5版本使用mysql_convert_table_format轉化存儲引擎
[root@redhat7_4 ~]# yum -y install perl-DBI perl-DBD-MySQL #需要安裝相關perl語言包
mysql> show create table test.info\G;
[root@redhat7_4 ~]# vim /usr/local/mysql/bin/mysql_convert_table_format"e|engine|type=s" => \engine, #32行進行修改
[root@redhat7_4 ~]# mysql_convert_table_format --user=root --password=123 --host=localhost --socket=/tmp/mysql.sock --type=MyISAM test info
解析:
mysql_convert_table_format #批量轉換存儲引擎
--force #碰到錯誤強制進行轉換
--host #指定轉換的主機
--user #指定連接的用戶
--password #指定連接的用戶密碼
--socket #指定socket文件存在的位置
--port #指定端口,如果不是"localhost"可以不指定
[root@redhat7_4 ~]# mysql -uroot -p -e "show create table test.info\G;"
5).5.7版本
[root@redhat7_5 ~]# yum -y install perl-DBI perl-DBD-MySQL #需要安裝相關perl語言包
[root@redhat7_5 ~]# ls /usr/local/mysql/bin/mysql_c
超詳細MySQL常用數據庫引擎