0

有许多列 TEXT 类型的表。有些表很大,服务是高负载的。InnoDB 中的所有表。

当 SQL 查询创建 tmp 表时,如果它有一个 TEXT 类型的字段,则该表在磁盘上创建为 MyISAM 类型。为了避免磁盘 I/O 操作 MySQL 临时目录 (tmpdir) 被挂载在内存 (tmpfs) 中。

1) MyISAM tmpfs 或 Memory 哪个会更快?有很大的不同吗?

2) 如果 MyISAM 用于临时表,我是否需要配置缓冲区,只有 MyISAM 表才需要:read_buffer_size read_rnd_buffer_size?这些 MyISAM 配置是否会对性能产生影响?(Myisam_sort_buffe_size, key_buffer_size)

我想将 TEXT 更改为 VARCHAR。

4

1 回答 1

0

通常,最好忽略您提出的所有问题。

  • 如果SELECT 包含TEXT,它必须使用 MyISAM,而不是 MEMORY。也就是说,如果您不触摸任何TEXTBLOB或“大”VAR*列,则许多不需要使用 MyISAM。
  • 让我们看看查询;也许我们可以避免 tmp 表!
  • 基于各种缓存问题,如果可行,MyISAM tmp 表将大部分(完全?)保留在 RAM 中。
  • 对于 tmp 表,MEMORY 几乎总是比 MyISAM 快。
  • 如果你使用 ramdisk 并且 tmp 表太大,查询会崩溃。
  • 如果你使用 ramdisk,你正在从其他东西(特别是 InnoDB 的 buffer_pool)窃取 RAM,从而减慢其他所有东西!
  • 如果您需要超过 255 个(或者是 512 个?我没有确切的截止值。)从 TEXT 更改为 VARCHAR 将不起作用。
  • 您提到的所有设置都与用例无关。
于 2016-10-07T18:27:02.120 回答