我读过表索引压缩仅发生在MyISAM中,但我在dev.mysql中看到一篇文章,其中说: InnoDB支持表和索引压缩!那么,MyISAM的优点是什么呢?还有什么理由可以使用MyISAM吗?(除全文搜寻外)
发布于 2011-12-21 19:35:09
就恢复InnoDB磁盘空间而言,您只需要将数据从ibdata1 1迁移回来一次,如果您启用innodb的话。_文件_每_表格。
一旦这样做,任何膨胀的InnoDB表都可以缩小。例如,如果您有一个名为InnoDB的mydb.mytable,则可以使用以下方法对其进行收缩:
ALTER TABLE mydb.mytable ENGINE=InnoDB;或
OPTIMIZE TABLE mydb.mytable;@Craig在MyISAM上完全正确。
至于InnoDB,单独还原表可能是一场噩梦。这是因为表要么在ibdata1 (innodb_file_per_table=0)内部,要么在外部(innodb_file_per_table=1)。
ALTER TABLE tblname DISCARD TABLESPACE和ALTER TABLE tblname IMPORT TABLESPACE,因为表空间id是硬编码的。你必须写一些自定义的临时脚本来实现这样的奇迹。与ALTER TABLE tblname DISCARD TABLESPACE和ALTER TABLE tblname IMPORT TABLESPACE联合使用。发布于 2011-12-21 19:15:31
中的压缩
它存在于表级别的InnoDB版本中,从MySQL 5.1开始。http://dev.mysql.com/doc/innodb-plugin/1.0/en/。
我欣赏MyISAM方面的两个优点。
在MyISAM中,可以在不影响其他数据库和恢复磁盘空间的情况下删除文件系统上的数据库。使用InnoDB时,当您删除数据库时,ibdata文件不会收缩。我只能通过删除ibdata文件,然后恢复每个剩余的数据库来恢复ibdata文件中的空间。也许有人知道更好的方法?
MyISAM的另一个优点是能够使用诸如bacula或Acronis这样的备份系统来恢复数据库。使用MyISAM,我可以通过文件系统命令将数据库复制到MySQL中或从MySQL中复制出来,而不影响其他数据库。使用InnoDB,我必须通过MySQL客户端完成一切。
因此,我认为MyISAM在某些情况下更容易管理。在一个混合了MyISAM和InnoDB的数据库中,您可能只能恢复特定的表,但我还没有尝试过。
就性能而言,我最近读到的一篇来自MySQL的白皮书显示,InnoDB更好。
https://dba.stackexchange.com/questions/9500
复制相似问题