文章目錄
#接上一篇文章
5 MySQL體系架構
# 以下我們選一些比較常用的存儲引擎進行簡單的說明,mysql所使用的儲存引擎會對資料庫的效能產生直接的影響,也希望各位能仔細的了解儲存引擎的一些特點,完了之後才使用儲存引擎。
5.1 MyISAM
MyISAM在MySQL5.5之前版本是預設的儲存引擎。由於這個原因,還有很多伺服器在使用MyISAM這個儲存引擎。同時,MyISAM目前是許多系統表,臨時表所使用的儲存引擎,這裡說的臨時表不是我們透過create table建立出來的表,是指在排序、分組等操作中,當數量超過一定的大小之後,有查詢優化器建立的臨時表。
MyISAM儲存引擎是由MYD和MYI組成,MYD是資料檔案的副檔名,MYI是索引檔案的副檔名,這個儲存引擎是將資料表儲存在以這兩個為副檔名的資料檔案和索引文件中。
對表格進行檢查,透過
repair table tablename對表格進行還原。
指令來壓縮表。壓縮是對錶獨立進行壓縮的,因此讀取一行資料的時候,不必對整個表進行解壓縮。
5.2 Innodb#
Innodb是MySQL5.5及之後版本預設的儲存引擎,Innodb是交易儲存的儲存引擎,也就是說支援事務的處理。
Innodb有自己的表空間的概念,然後資料是儲存在表空間中的,是由innodb_file_per_table
這個參數來決定的,如果這個參數是為ON
#則會對每個Innodb表建立一個副檔名為ibd
的系統文件,如果這個參數為OFF
時,則會把資料儲存到系統的共用表空間,也就是ibdataX
,X
代表的時一個數字,預設從1開始。
看這個參數的指令為:show variables like 'innodb_file_per_table';
修改這個參數的指令為:set global innodb_file_per_table=off;
5.2.1 系統表空間與獨立表空間要如何選擇
比較:
獨立表空間 | |
---|---|
可以透過 | optimize table指令縮小系統檔案
|
可以同時向多個檔案刷新資料 |
建議:
步驟:
#5.2.2 Innodb儲存引擎的特性
5.2.3 Innodb狀態檢查
可以使用下列指令對Innodb狀態進行檢查:
show engine innodb status
5.2.4 適用場景
Innodb適合大多數OLTP應用,因為在mysql5.7版本之後,Innodb已經支援了全文索引和空間函數。5.2.4 (拓展) 什麼是鎖定
5.2.3.1 什麼是鎖定?
5.2 .3.2 鎖的型別:
5.2.3.3 寫入鎖定和讀取鎖定的相容關係(對一行的兼容性情況)
讀取鎖定 | ||
---|---|---|
#不相容 | ||
在實際情況中,可能與上表的結果會有所不同,主要是因為Innodb中的鎖機制是很複雜的一樣東西,還有很多鎖的存在影響最終的結果。
5.2.3.4 鎖定的粒度:
5.3 CSV儲存引擎
CSV儲存引擎可以將csv文件作為mysql的表文件來處理,這種儲存引擎的儲存格式就是普通的csv文件,在csv儲存引擎的資料儲存方式非常的由特點,如果我們把表格儲存在MyISAM或Innodb中,其資料檔案我們是不能直接檢視的,因為這兩種檔案的儲存是以二進位的格式來儲存的,而CSV儲存引擎則不同,CSV的資料是以文字的方式儲存在檔案中的,也就是我們可以透過查看檔案的命令來查看,如more,或是使用vi指令來查看編輯csv儲存引擎中的表,只要符合CSV檔案的格式和要求,我們就不用擔心損壞資料。
當我們在mysql中建立了CSV儲存引擎表時,我們應該可以看到3個檔案系統中的檔案。這3個都是以表名為檔名,但會分別以csv,csm,frm為後綴,其中csv檔就是CSV儲存引擎中的資料檔。 csm檔案儲存表的元資料和表狀態和資料量。 frm檔案儲存表結構資訊。
5.3.1 CSV儲存引擎的特點
#最大的特點是以CSV格式進行資料儲存
CSV中的每一列都是以,來分隔的,而且文字的內容是以雙引號來引起來的,如下圖所示:
所有欄位必須都是不能為NULL的
不支援索引 不適合大表,不適合線上處理
5.3.2 CSV儲存引擎的適用場景
5.4 Archive儲存引擎
5.4.1 檔案系統儲存特性
Archive儲存引擎會快取所有的寫,並且利用zlib對插入的行進行壓縮,因此Archive儲存引擎相對於MyISAM儲存引擎的表更加節省磁碟I/O,對於同樣數量級的數據,Archive儲存引擎相對於MyISAM和Innodb更加節省儲存空間。一個幾T的Innodb的表儲存在Archive儲存引擎當中,可能只需要幾百兆的儲存空間。 Archive儲存引擎的表格的資料是以ARZ為後綴的一個文件,和其他引擎一樣,也存在一個以frm為後綴的系統文件,用於儲存表格的結構資訊。
######5.4.2 Archive儲存引擎的特點#############只支援###insert###和###select###動作### ###只允許在自增ID列上加索引############5.4.3 Archive儲存引擎使用場景#########場景1:日誌和資料擷取類資料### 因為Archive不支援修改和刪除,而我們ORDB一定會對資料進行修改的,但是對於一些倉庫類型的應用,或者一些特殊的表,還是有用的,比如說,記錄日誌的表或者是資料收集類別的表,因為它需要收集大量數據,所以比較適合使用Archive儲存引擎。因為Archive儲存引擎在所有引擎中來說,它的儲存空間是最小的,但是還是要注意,即使在資料擷取或日誌的應用中,Archive儲存引擎是無法對這些資料進行更新的,所以在記錄日誌或者在資料擷取類別應用中對資料進行修改的話,可能也無法使用Archive儲存引擎。 #########5.5 Memory儲存引擎############5.5.1 檔案系統儲存特性######Memory儲存引擎也稱為HEAP儲存引擎,所以資料都保存在記憶體中, 這就表示這中資料的表是一次性的,一旦MySQL服務重啟,所有Memory儲存引擎的資料都會消失,但是表結構會保留下來,因為在Memory儲存引擎下建立表,只會產生一個frm系統文件,該文件是用來保存表結構的。這就是為什麼重啟MySQL伺服器資料會遺失,表結構不會的原因。
從它的檔案儲存特點我們可以知道,Memory儲存引擎的I/O效率會比MyISAM高很多,因為MyISAM只有索引會保存在記憶體中,而資料則由作業系統來快取的,而Memory存儲引擎所有資料和索引都保存在記憶體中,下面我們來看看Memory儲存引擎的功能特性。
5.5.2 Memory的功能特點
功能特徵:
5.5.3 Memory中容易混淆的概念
#Memory儲存引擎表:
對所有的系統都可以使用,它並不是一種臨時表。
臨時表:
臨時表分為兩種,一種是查詢優化器在優化查詢時所使用的系統使用臨時表,也就是內部臨時表,系統使用臨時表在超過限制(使用BLOB或TEXT大字段)時使用MyISAM臨時表,未超限制使用Memory表。
另一種是透過指令create temporary table
建立的暫存表,建立的表可以使用任何儲存引擎。
無論是哪一種臨時表,只對內部可見。
5.5.4 Memory的使用場景
Memory資料易遺失,所以要求資料可再生。
5.6 Federated儲存引擎
5.6.1 Federated的特性
5.6.2 Federated如何使用
Federated儲存引擎可以實現SQL Server連接伺服器的功能,但由於本身的效能並不太好,通常可以透過複製等實現相同的目的,所以在目前的MySQL版本中,Federated儲存引擎預設是禁止的。如果需要使用Federated儲存引擎,則需要在/usr/local/mysql/my.cnf
#中加入federated=1
,接著重啟MySQL伺服器,我們可以透過show engine
來確認目前MySQL伺服器是否支援Federated儲存引擎。
而在create table
語句中使用下面的連接字串,mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
遠端伺服器綁定連線:grant select,update,insert,delete on remote.remote_fet to fred_link@'127.0.0.1' identified by '123456'
就可以決定的遠端伺服器的相關資訊以及相關的資料庫表的一些資訊。
5.6.3 Federated的適用場景
6 如何選擇正確的儲存引擎
參考條件:
更多相關免費學習推薦:##mysql教學(影片)
#
以上是大數據學習之二 MYSQL進階的詳細內容。更多資訊請關注PHP中文網其他相關文章!