`
hejiajunsh
  • 浏览: 407219 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

优化MySQL myisam、innodb表碎片

阅读更多

针对MyISAM表类型采用 OPTIMIZE TABLE table_name SQL语句清理碎片.

 

InnoDB 使用的 Clustered Index,索引和数据绑定在一起,重排序是不现实的.所以不支持 MyISAM 式的 OPTIMIZE,而是绑定到了ALTER TABLE 命令上面.可以通过执行以下语句来整理碎片,提高索引速度:


ALTER TABLE table_name ENGINE = Innodb;


这其实是一个NULL操作,表面上看什么也不做,实际上重新整理碎片了.当执行优化操作时,实际执行的是一个空的 ALTER 命令,但是这个命令也会起到优化的作用,它会重建整个表,删掉未使用的空白空间.

 

什么是mysql碎片?怎样知道表的碎片有多大呢?

 

简单的说,删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来.于是造成了数据的存储位置不连续,以及物理存储顺序与理论上的排序顺序不同,这种是数据碎片.

 

数据碎片分为两种,一种是单行数据碎片,另一种是多行数据碎片.

 

前者的意思就是一行数据,被分成N个片段,存储在N个位置.后者的就是多行数据并未按照逻辑上的顺序排列.

 

当有大量的删除和插入操作时,必然会产生很多未使用的空白空间,这些空间就是多出来的额外空间.索引也是文件数据,所以也会产生索引碎片,理由同上,大概就是顺序紊乱的问题.

 

Engine不同,OPTIMIZE 的操作也不一样的,MyISAM 因为索引和数据是分开的,所以 OPTIMIZE 可以整理数据文件,并重排索引.

 

OPTIMIZE 操作会暂时锁住表,而且数据量越大,耗费的时间也越长,它毕竟不是简单查询操作.所以把 Optimize 命令放在程序中是不妥当的,不管设置的命中率多低,当访问量增大的时候,整体命中率也会上升,这样肯定会对程序的运行效率造成很大影响.比较好的方式就是做个shell,定期检查mysql中 `information_schema`.`TABLES`字段,查看 DATA_FREE 字段,大于0话,就表示有碎片.脚本多长时间运行一次,可以根据实际情况来定,比如每周跑一次.

 

CHECK TABLE 或 REPAIR TABLE,检查或维护 MyISAM 表
OPTIMIZE TABLE,优化 MyISAM 表
ANALYZE TABLE,分析 MyISAM 表

分享到:
评论

相关推荐

    数据库引擎 MyISAM 和 InnoDB 对比

    在MySQL数据库系统中,MyISAM与InnoDB是最常被提及的两种存储引擎。这两种引擎在功能、性能以及适用场景上存在显著差异,本文将深入探讨这两者之间的区别,并分析它们各自的优势及应用场景。 #### 一、基本概念 - ...

    Mysql(MyISAM)的读写互斥锁问题的解决方法

    这样,把concurrent_insert设置为2是很划算的,至于由此产生的文件碎片,可以定期使用OPTIMIZE TABLE语法优化。 max_write_lock_count也是一个重要的参数,它可以控制写操作的优先级。缺省情况下,写操作的优先级要...

    大幅提升MySQL中InnoDB的全表扫描速度的方法

    总结来说,提升MySQL中InnoDB的全表扫描速度的关键在于减少随机I/O,通过预读取技术如"Logical Readahead",以及优化硬件配置和数据库设计,可以显著改善全表扫描的效率。这对于需要定期进行全表扫描操作的系统,如...

    myisam和innodb的区别

    4. **数据优化**:为了减轻动态型表中可能出现的碎片问题,可以通过`OPTIMIZE TABLE`命令或者导出数据再重新导入的方式来优化表结构。 5. **高速查询**:尽管MyISAM在写入方面有所限制,但它在读取大量数据时表现...

    MySQL 清除表空间碎片的实例详解

    MySQL数据库在长期运行过程中,由于各种操作如删除、更新等,会导致表空间出现碎片,这不仅浪费了存储空间,还可能影响查询性能。本文将详细解释表空间碎片的产生原因,提供查看和清除碎片的方法,并给出一些建议。 ...

    mysql myisam 优化设置设置

    通过上述优化设置,可以显著提升MySQL MyISAM表的性能,特别是在处理大量数据时。然而,值得注意的是,随着InnoDB存储引擎的普及,由于其支持事务处理和行级锁定,现在更推荐使用InnoDB,尤其是在高并发环境下。但在...

    mysql 清碎片

    1. **定期检查与优化**:根据业务情况定期运行上述查询语句检查表的碎片情况,并根据实际情况决定是否需要执行清理操作。 2. **监控性能变化**:监控数据库性能的变化,如果发现查询速度变慢或其他性能问题,应及时...

    MySQL备份与恢复实战(PDF版)

    包含下列主题:mysql 日志文件,使用mysqld 加相应选项来启用某种日志。Mysql完全备份及恢复:mysqldump 对MyISAM 或InnoDB 完全备份,mysqlhotcopy 对MyISAM 完全备份。...Innodb 表的碎片整理和模糊检查点。

    解析mysql 表中的碎片产生原因以及清理

    使用mysqlcheck命令与执行OPTIMIZE TABLE的效果是一样的,都能有效地减少碎片,优化表性能。 对于InnoDB存储引擎,情况则相对复杂一些。InnoDB由于其存储机制的特点,使用OPTIMIZE TABLE和mysqlcheck并不能有效地...

    优化MySQL数据库性能的八大妙手.rar

    MySQL支持多种存储引擎,如InnoDB和MyISAM。InnoDB支持事务处理和行级锁定,适合高并发场景;MyISAM则速度快但不支持事务,适合读多写少的应用。根据业务需求选择合适的存储引擎。 四、适当的数据类型 选择合适的...

    MySQL中如何进行表的优化和压缩?

    合理使用索引、避免过多的冗余字段和重复数据,避免表的范式过高或过低等,都是优化表的关键。通过分析应用场景和查询需求,设计出符合实际需求的表结构。 创建适当的索引 索引对于查询性能和表的压缩都很重要。...

    MySQL 中如何优化表释放表空间

    本篇文章将深入探讨两种常见的优化表以释放表空间的方法,并提供相关的注意事项和实践技巧。 方法一:`OPTIMIZE TABLE table_name` `OPTIMIZE TABLE` 是MySQL中一个常用的命令,用于对表进行优化,包括重组数据、...

    php之mysql优化

    1. **索引优化**:`mysql_rel.sql`可能包含SQL脚本,其中创建表结构和数据的关系。索引是提高查询速度的关键。为频繁用于WHERE子句的列创建合适类型的索引(如B树或哈希索引)可以显著加快查找速度。避免在高基数列...

    MyISAM和InnoDB引擎优化分析

    这几天喻名堂在学习mysql数据库的优化并在自己的服务器上进行设置,喻名堂主要学习了MyISAM和InnoDB两种引擎的优化方法,它们各有优缺点,一般在实际应用中将两种引擎结合起来使用效果会更好。喻名堂测试的硬件配置...

    MySQL数据库高效使用规范.docx.zip_MYSQL_mysql 优化_mysql优化

    - **定期分析与优化**:使用ANALYZE TABLE更新统计信息,OPTIMIZE TABLE整理数据碎片。 - **备份与恢复**:定期备份数据库,以防数据丢失,熟悉恢复流程。 7. **监控与调优工具** - **MySQL Performance Schema*...

    性能优化Mysql篇.zip

    4. **内存参数调整**:优化MySQL的内存使用,如key_buffer_size(用于MyISAM表的索引缓存)、innodb_buffer_pool_size(InnoDB的缓冲池大小)等,确保足够的内存用于数据缓存。 5. **查询缓存**:启用查询缓存可以...

    MySQL优化大揭秘.rar

    MySQL优化是数据库管理中至关重要的一个环节,它旨在提高数据查询效率、降低系统资源消耗,以确保服务的稳定性和响应速度。"MySQL优化大揭秘"这个压缩包中的"SQL.pdf"很可能包含了关于如何优化MySQL数据库的详细教程...

    MySQL高级优化文档

    本高级优化文档主要针对在Linux环境下运行的MySQL,涵盖了安装、配置以及系统优化等多个方面。以下是相关的知识点详解: 1. **MySQL安装与配置** - **源码编译安装**:为了获取最佳性能和定制化选项,可以选择源码...

    caoz的mysql性能优化教程

    教程将涉及数据表的规范化与反规范化、分区与分表策略,以及如何根据业务需求选择合适的存储引擎(如InnoDB和MyISAM)。 四、内存配置 优化MySQL的内存使用可以显著提升性能。caoz会讲解如何调整缓冲池大小、查询...

Global site tag (gtag.js) - Google Analytics