索引与表的维护
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