Home  >  Article  >  Database  >  MyISAM-性能与特性的折中_MySQL

MyISAM-性能与特性的折中_MySQL

WBOY
WBOYOriginal
2016-06-01 13:55:39768browse

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 语句来修改指针的大小。但是这样的操作会使整个表和它的索引重写。会花费大量的时间。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn