有许多列是TEXT类型的表。有些表很大,服务是High Load。
当一个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中。对于tmp表,MEMORY几乎总是比MyISAM快。
- 如果你使用ramdisk,并且tmp表太大,查询会崩溃。
- 如果你使用ramdisk,你正在从其他东西(特别是InnoDB的buffer_pool)窃取RAM,从而减慢其他一切!
- 如果您需要超过255(或者是512),从TEXT更改为VARCHAR将不起作用?我没有确切的截止时间。)
- 你提到的设置都与这个用例无关。