MySql 的Optimize

不念不忘少年蓝@ 2023-03-05 03:22 121阅读 0赞

1、optimize优化原理

  1. mysql进行大量增删改操作,磁盘上的空间没有被立即收回(数据空间、索引位),而是等待新的数据来填充空缺
  2. -- 这些空间可以被后续的insert操作利用,**但如果记录是变长的,那么不是所有的空间都能被充分利用**
  3. -- 形成碎片,影响磁盘IO
  4. optimize可以把分散(fragmented)存储的数据重新挪到一起(defragmentation),清除碎片,回收闲置的数据库空间
  5. 对于MyISAM表,OPTIMIZE TABLE按如下方式操作:
  6. 1. 如果表已经删除或分解了行,则修复表。

  2. 如果未对索引页进行分类,则进行分类。

  3. 如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。

  1. 对于BDB表,OPTIMIZE TABLE目前被映射到ANALYZE TABLE
  2. 对于InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE上,这会重建表。重建操作能更新索引统计数据并释放成簇索引中的未使用的空间。请参见13.5.2.1节,“ANALYZE TABLE语法”。使用?skip-new或?safe-mode选项可以启动mysqld

2、限制

  1. OPTIMIZE TABLE只对MyISAM, BDBInnoDB表起作用
  2. 这个操作会使MySql锁定表
  3. InnoDB引擎的表分为共享表空间和独享表空间表,可以通过show variables like 'innodb\_file\_per\_table'来查看是否开启独享表空间。 独享表空间的表是无法进行optimize操作的, 因为独享表空间的表当数据删除时会重组索引并释放对应的空间

3、实践

  1. -- 不需要经常运行,删除大量数据、更新大量变长数据时也仅仅需要每周后者一月运行一次

参考:

http://blog.51yip.com/mysql/1222.html

https://blog.csdn.net/hsd2012/article/details/51485250

http://www.cnblogs.com/sunss/archive/2010/09/14/1825721.html

发表评论

表情:
评论列表 (有 0 条评论,121人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySql Optimize

    1、optimize优化原理        对mysql进行大量增删改操作,磁盘上的空间没有被立即收回(数据空间、索引位),而是等待新的数据来填充空缺     -- 这

    相关 MySQL Query Optimizer

    > 本教程中所使用的数据库的建表语句都在“MySQL高阶教程索引”这篇文章中,点击链接直达:[索引&建表语句][Link 1] > 摘要:本文主要介绍MySQL的SQL优化模