MySQL:在固定列的表上需要OPTIMIZE TABLE吗?
我有一个每周脚本,它从我们的实时数据库移动数据并将其放入我们的存档数据库,然后删除它刚刚从实时数据库存档的数据.因为它是一个不错的大小删除(大约10%的表被修剪),我想我应该在此删除后运行OPTIMIZE TABLE. 但是,我正在从mysql文档中读到这个,我不知道如何解释它: “如果删除了表的大部分,或者对具有可变长度行的表(具有VARCHAR,VARBINARY,BLOB或TEXT列的表)进行了许多更改,则应使用OPTIMIZE TABLE.保留已删除的行在链表中,后续INSERT操作重用旧行位置.您可以使用OPTIMIZE TABLE回收未使用的空间并对数据文件进行碎片整理. 第一句对我来说是模棱两可的.这是否意味着你应该运行它: 那有意义吗?所以如果我的表没有VAR列,我还需要运行吗? 虽然我们正在研究这个主题 – 是否有任何指示器告诉我OPTIMIZE呼叫表已经成熟? 另外,我读到了这个http://www.xaprb.com/blog/2010/02/07/how-often-should-you-use-optimize-table/,它说只运行OPTIMIZE表对主键很有用.如果我的大部分选择来自其他指数,我是否只是在拥有代理键??的表上浪费精力? 非常感谢! 最佳答案 在您的场景中,我不认为定期优化表格会产生明显的差异.首先,文档的第二个解释(B)是正确的 – “如果您删除了任何表的大部分内容,或者如果您对具有可变长度行的表进行了许多更改.” 如果您的表没有VAR列,则每条记录(无论其包含哪些数据)都会占用表中完全相同的空间量.如果从表中删除记录,并且DB选择重用上一条记录的确切区域,则可以不浪费任何空间或分割数据. 至于OPTIMIZE是否仅提高使用主键索引的查询的性能,那么该答案几乎肯定会根据正在使用的存储引擎而有所不同,我担心我无法回答这个问题. 但是,谈到存储引擎,如果你最终使用OPTIMIZE,请注意它不喜欢在InnoDB表上运行,因此命令映射到ALTER并重建表,这可能是一个更昂贵的操作.无论哪种方式,表在优化期间都会锁定,因此在运行时要非常小心. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |