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 語句來修改指針的大小。但是這樣的操作會使整個表和它的索引重寫。會花費大量的時間。