MyISAM 用于将每个表存储在相应的文件中很方便。InnoDB 在很多方面都取得了进步,但我想知道为什么 InnoDB 将所有数据库存储在一个文件中(ibdata1
默认情况下)。
我知道 InnoDB 将通过表的单个索引文件映射文件中数据的位置,但我不明白为什么它将所有数据混合在一个文件中。更重要的是,为什么要混合服务器上所有数据库的数据?
MyISAM 的一个有趣功能是,可以将数据库文件夹复制/粘贴到另一台机器上,然后使用该数据库(无需转储)。
InnoDB 将所有表存储在一个大文件中ibdata1
。
删除大表后,无论表有多大,文件都会保持其大小。如何缩小该文件而不必转储并重新导入整个数据库(总共有数百 GB)?
我认为原因是因为您仍然可以回滚下降。就我而言,我不需要。
我们有一个应用程序,其中只有一个表将增长到数百万行,而其余的将略低于一百万行。那么我们应该使用 innodb_file_per_table 还是保留一个 .ibd 的建议是什么?我读过一些文章说不要使用它,因为在执行连接时您需要更多磁盘访问权限?为了报告生成目的,我们将在此表和其他表之间进行连接。
我正在使用 innodb_file_per_table 运行 MySql innodb。
作为日常脚本,我想为一组表创建一个新分区,并删除昨天的分区。需要运行什么命令来删除旧分区以释放磁盘空间?我希望避免系统因数据库磁盘使用而耗尽磁盘空间。我还想避免关闭 Mysql。
编辑:我读过丢弃表空间应该删除占用大部分空间的 .ibd 文件。
ALTER TABLE tbl_name DISCARD TABLESPACE;
Run Code Online (Sandbox Code Playgroud)
但是,在分区表上使用此命令存在一个已知错误。
innodb ×4
mysql ×4
disk-space ×2
memory ×1
myisam ×1
mysql-5.5 ×1
mysqldump ×1
partitioning ×1