mysql - 内存 VS MyIsam tmpfs?

标签 mysql memory myisam tmpfs

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

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

1) MyISAM tmpfs 和内存哪个更快?有很大区别吗?

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

我想将 TEXT 更改为 VARCHAR。

最佳答案

一般来说,最好忽略您提出的所有问题。

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

关于mysql - 内存 VS MyIsam tmpfs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39911245/

相关文章:

mysql - 将 ISAM 表文件(ISD、ISM)从一个 mysql 导入到另一个

php - MySQL 在 codeigniter 中选择格式的日期

mysql - 错误率: Monitor Indexing Migration

Java Long 和 String 对象的大小

c++ - 如何接受常量的用户输入并使用 writeprocessmemory?

Android服务同进程及内存释放

MySQL MyISAM 如何查看表或列的所有外键 TO 和 FROM?

mysql - 将表类型从 MyISAM 更改为 InnoDB

mysql - Oracle 需要类似于 INFORMATION_SCHEMA 为 MySQL 提供的查询

mysql - jdbc-mysql 如果变量为空, "' +变量 +'"的值会发生什么?