MySQL 架構 – MySQL 儲存引擎 -MyISAM

來源:互聯網
上載者:User

 

MyISAM

MyISAM是MySQL預設的儲存引擎。MyISAM在效能和特性上提供了一個很好的折中的解決辦法。特性有,全文索引,壓縮,GIS函數。MyISAM並不支援事物和行鎖。

 

儲存

MyISAM把表格儲存體在兩個檔案中。一個資料檔案,一個索引檔案。副檔名為.MYD和.MYI。MyISAM的格式是平台獨立的。意思就是你可以把這兩個檔案拷貝在任意的平台上。

 

MyISAM可以包含動態或靜態列。MySQL根據表的定義來決定使用哪種格式。MyISAM表的行數限制在於,硬碟空間和作業系統所允許存在的最大檔案。

 

MyISAM表在MySQL5.0中,預設的是動態長度的行,以及可操作256TB資料,使用6位元組的指標指向資料記錄。早期的MySQL預設指標為4位元組,支援4GB的資料。所有的MySQL版本支援的指標大小上限為8位元組。為了改變MyISAM表的指標大小,你必須指定MAX_ROWS,AVG_ROW_LENGTH的值。這兩個資料指出了你所需要空間的總數。

 

 

CREATE TABLE mytable (

   a    INTEGER  NOT NULL PRIMARY KEY,

   b    CHAR(18) NOT NULL

) MAX_ROWS = 1000000000 AVG_ROW_LENGTH = 32;

 

這個例子中,我們告訴MySQL對這個表分配空間至少是32G。看看MySQL到底分配了多少。我們來看看。

mysql> SHOW TABLE STATUS LIKE 'mytable' \G
*************************** 1. row ***************************
Name: mytable
Engine: MyISAM
Row_format: Fixed
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 98784247807
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2002-02-24 17:36:57
Update_time: 2002-02-24 17:36:57
Check_time: NULL
Create_options: max_rows=1000000000 avg_row_length=32
Comment:
1 row in set (0.05 sec)

 

我們看到了Create_options的值,是我們所設定的。也看到了Max_data_length的值接近了91GB。你可以通過ALTER TABLE 語句來修改指標的大小。但是這樣的操作會使整個表和它的索引重寫。會花費大量的時間。

 

MyISAM 特性

做為老牌的MySQL引擎。MyISAM有很多好的特性。這些特性已經被開發了很多年。已經能滿足工作需要。

 

鎖和並發

MyISAM鎖定了整張表,而不是行。讀取程式能獲得將要讀取的表的讀鎖。寫入程式獲得寫鎖。然而,當查詢語句執行的時候,仍然可以插入新的資料。(並發插入)。這個是非常有用的特性。

 

自動修複

MySQL支援自動檢測和修複MyISAM類型的表。

 

手動修複

你可以使用CHECK TABLE和REPAIR TABLE命令來檢測表的錯誤和修複錯誤。當伺服器停止的時候,你可以使用myisamchk命令列工具去檢查和修複表。

 

索引特性

在MyISAM表中,你可以給第一個500字元的BLOB和TEXT列加上索引,MyISAM支援全文索引。為了複雜的查詢,索引了單獨的詞。在以後會詳細介紹索引。

 

健寫入延遲

MyISAM表標有DELAY_KEY_WRITE的建立選項。意思是在一個語句結束後,不會把更改的索引寫入到硬碟上。而是MyISAM在記憶體中緩衝了更該。當它精簡緩衝區或者關閉表的時候,就會把緩衝的索引塊寫入到硬碟。對於一個頻繁更新的表,會有很大的效能提升。然而,在伺服器或系統掛掉的時候,索引也會被破壞,並且需要去修複它。你可以在伺服器啟動之前,用myisamchk去檢測並修複。或者使用自動修複的選項。(即使你不使用DELAY_KEY_WRITE這個特性,這個個也是個很好的安全方案)。你可以全域的配置DELAY_KEY_WRITE。也可以給單獨的表進行配置。

 

壓縮的MyISAM表

舉個例子吧,在基於CD-ROM或者DVD-ROM的應用程式以及其他的嵌入式環境。一旦這些表被建立就不會修改以及填滿了資料。這些表就非常適合被壓縮。

 

你可以使用myisampack工具去壓縮表。你不能更改壓縮表(雖然你可以解壓縮,修改,重新壓縮),但是這種表能節省大量的硬碟空間。也可以提高效能,因為這種表小,需要的硬碟空間也很少,也就能快速的尋找記錄了。壓縮表可以有索引,但是它們僅僅是唯讀。

 

對解壓縮的資料進行讀取,對於大多數現代的硬體來說都是可以忽略不計的。壓縮的真正的好處是在於降低了硬碟的I/O.行可以單獨的壓縮,因此MySQL沒有必要解壓縮整個表,僅僅提取一行就可以了。

 

MyISAM Merge Engine

Merge引擎是MyISAM的變種。一個Merge表是許多相同的MyISAM表整合到一個虛表中。這點比較適合把MySQL應用在日誌和資料倉儲的應用中。

 

來自:http://xiayuanfeng.iteye.com/blog/400662

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.