索引与表的维护

Finding and Repairing Table Corruption

CHECK TABLE 查看表是否corrupt

REPAIR TABLE 修复表

如不支持该操作,可以

mysql> ALTER TABLE innodb_tbl ENGINE=InnoDB

只能修复索引,如果是系统损坏或是数据损坏,则只好还原数据备份。

 

Updating Index Statistics


MySQL查询优化器会调用存储引擎的两个API来决定如何使用索引:

1. records_in_range(), 返回在一个范围内的记录数量

2. info(), 返回很多数据信息

如果存储引擎提供的数据不准确甚至没有数据,那么优化器做的选择可能会很糟糕。

可以运行ANALYZE TABLE

不过不同的存储引擎提供的索引数据很不相同,

  • Memory根本没有索引数据
  • MyISAM把索引数据存在硬盘上,分析的过程中整张表会被锁住
  • InnoDB把索引数据存在内存里

Reducing Index and Data Fragmentation

数据碎片化

  • 行碎片:一行的数据被分成好几块分散在不同的地方
  • Intra-row fragmentation: 逻辑上连续的行在硬盘上的存储不连续
  • 剩余空间碎片:大量的空数据

OPTIMIZE TABLE