调整MySQL以便在开发期间快速创建列/索引

时间:2009-12-17 19:43:43

标签: mysql performance optimization indexing

假设一个MySQL MyISAM表包含一千兆字节的数据和一千兆字节的索引。

此外,假设在开发过程中,列和索引将频繁地添加到表中或从表中删除。由于数据库的大小,使用标准的非调优MySQL设置时列/索引创建速度很慢。

应调整哪些MySQL服务器参数以最大限度地减少添加新列/索引所需的时间?

2 个答案:

答案 0 :(得分:4)

我认为您应该关注的关键设置是key_buffer_sizemyisam_max_sort_file_sizemyisam_sort_buffer_sizekey_buffer_size是MyISAM最重要的设置之一,但其他两个可能需要一些解释。

来自http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html

<强> myisam_max_sort_file_size

  

临时的最大大小   允许MySQL使用的文件   同时重新创建MyISAM索引   (在REPAIR TABLE,ALTER TABLE或   LOAD DATA INFILE)。如果文件大小   将大于这个值,   index是使用密钥缓存创建的   相反,哪个更慢。价值是   以字节为单位。

     

默认值为2GB。如果是MyISAM   索引文件超过此大小和磁盘   空间可用,增加了   价值可能有助于表现。

<强> myisam_sort_buffer_size

  

缓冲区的大小   排序MyISAM索引时分配   在REPAIR TABLE期间或创建时   使用CREATE INDEX或ALTER的索引   表

     

最大允许设置   myisam_sort_buffer_size是4GB。

所以基本上,如果您希望索引大于myisam_max_sort_file_size,您可能需要考虑调整它。如果没有,myisam_sort_buffer_size可能值得关注。

请记住,在MyISAM表上创建索引会锁定整个表。如果您经常在大型桌面上执行此操作,则无论您调整了多少设置,都可能会出现严重的性能问题。

答案 1 :(得分:3)

以下是一些提示。

  1. 设置key_buffer_size存储索引所需的内存。分配的大小应大于需要索引的列*行数所需的大小。在您的情况下,它应该大于1 GB,因为您已经提到索引大小为1 GB。对于MyISAM Engine,索引可以存储在内存中,但不能存储在数据中。

  2. 如果需要在varchar字段上创建索引,请限制用于索引的字节数。例如,如果一列是varchar(500),那么在此上创建索引将是一个过度杀戮,如果MySQL只能通过使用前几个字符将范围缩小到几个记录,那将毫无用处。例如5个字符。

  3. 为了添加新列,MySQL必须创建一个临时表并使用新列值复制所有数据。为避免这种情况,最好使用主表和新列中的主键创建新表。

  4. 希望这有帮助。