【问题标题】:Tuning MySQL for speedy column/index creation during development调整 MySQL 以在开发过程中快速创建列/索引
【发布时间】:2010-12-27 19:13:51
【问题描述】:

假设 MySQL MyISAM 表具有 1 GB 的数据和 1 GB 的索引。

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

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

【问题讨论】:

  • 一个无聊的问题:为什么不直接减少数据集的整体大小?
  • Romain:由于某些应用程序特定的要求,在这种情况下根本不可能。但在其他一些情况下,这很可能是最简单的解决方案。

标签: mysql performance optimization indexing


【解决方案1】:

以下是一些提示。

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

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我认为您应该查看的关键设置是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 或 加载数据文件)。如果文件大小 将大于该值,则 索引是使用键缓存创建的 相反,它更慢。值为 以字节为单位。

    默认值为 2GB。如果 MyISAM 索引文件超过这个大小和磁盘 空间可用,增加 价值可能有助于提高性能。

    myisam_sort_buffer_size

    缓冲区的大小 排序 MyISAM 索引时分配 在修复表期间或创建时 具有 CREATE INDEX 或 ALTER 的索引 表。

    最大允许设置 myisam_sort_buffer_size 为 4GB。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      相关资源
      最近更新 更多