题
我在阅读有关此处在重构大慢SQL查询,而目前最高响应是米奇小麦,谁希望确保查询使用索引的主要选择,并提到:
我会做第一件事是检查,以确保没有被定期运行活动索引维护工作。如果没有,让所有现有的指数法改建,如果没有可能至少得到更新统计。
我只是很业余的DBA,我做了一些程序自由是基本的Java桌面客户端和偶尔MySQL后端。当我设置系统,我知道要创建将由被查询的列的索引,有一个varchar CaseID和VARCHAR的CustName。
不过,我几个月前设置这个系统了,离开了客户端运行它,我相信作为输入数据,我相信一切都还在工作很好的指标要长。我很担心,虽然该指标应定期重建,因为今天我已阅读,应该有一个“有效的维护工作”。唯一的维护工作,我对事情设定为每晚备份。
我想问问关于定期维护一个数据库可能需要的社区。它是neccessary重建索引?我可以信任的MySQL后端保持下去,只要没人用它搅乱,并在几GB的数据保持?
解决方案
有没有必要“重建”的索引。他们总是随时保持最新状态。也许他指的是重建的表。根据您的使用模式和架构,你可以在InnoDB中零散的网页,我想在MyISAM中也。重建表可以提高摆脱磁盘上的数据碎片的性能。我不经常使用MyISAM表,但我相信它是建议与某些使用模式运行“OPTIMIZE TABLE”。查看 OPTIMIZE TABLE MySQL的文档的一些好的信息在两个MyISAM和InnoDB。
我不熟悉的MyISAM复杂,但与InnoDB的是真实的统计数据可以得到过时。该数据库将作为您的数据的分布对于给定的指数估算的统计信息,并有可能为那些走出过期,然而MySQL / InnoDB中有内建的功能,以尽量保持最新的统计信息。通常,您不必担心。
所以,如果你正使用InnoDB,答案是否定的,你通常不会需要积极做任何事情来保持你的指标表现良好。我不是一定要与MyISAM的,我认为这是更常见的是需要定期优化这些表。
其他提示
它通常是建立一个cronjob,优化索引和检查错误是个好主意。
请参阅 mysqlcheck的。典型的定时任务看起来像mysqlcheck -Aaos
,检查所有表中的所有数据库中的错误,优化索引,并且仅输出上的错误。
您链接到有关“定期维护”答案是在被定期截断并重新填充临时表的具体情况。你并不需要这样做绝大多数的MySQL数据库安装。