程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MyISAM-性能與特性的折中

MyISAM-性能與特性的折中

編輯:關於MYSQL數據庫

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應用在日志和數據倉庫的應用中。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved