mysql索引键太多了

时间:2015-07-13 07:09:25

标签: mysql database

我正在进行数据库优化,其中包含.csv文件(大约3800条记录)的批量插入,间隔为每15分钟一次。

为此,我正在通过cron运行mis.sql文件。此文件包含Nine(09)mysql查询,这些查询从目标批量插入的表中执行重复删除,内部联接插入,删除和更新(ALTER,DELETE,INSERT& UPDATE)。

最近,在批量插入查询之前运行的查询遇到了问题。查询是 -

ALTER IGNORE TABLE pb ADD UNIQUE INDEX(hn,time);

错误1069(42000):指定的密钥太多;允许最多64个键

遇到上述错误时,将跳过所有后续查询。然后我检查了表pb,发现有64个唯一索引键创建了相同的基数值以及02索引键和01主键。

在尝试删除其中一个唯一索引时,它占用了太多时间(对于979,618条记录几乎需要15分钟),但最后,它并没有被删除。

这个问题有解决办法吗?

1 个答案:

答案 0 :(得分:0)

第一件事:为什么会有ALTER TABLE命令?新数据应该更改数据而不是数据库设计。因此,虽然INSERT,UPDATE和DELETE是这样一个脚本中的有效选项,但ALTER TABLE并不属于那里。删除它。

至于删除索引:这应该只需要几分之一秒。没有什么可以构建或重建,只需删除。

DROP INDEX index_name ON tbl_name;

我能想到的这么长时间的唯一原因是,当没有插入,更新和删除时,即使是短时间片也是如此。所以,也许你必须暂时停止你的工作(或者在一个空文件上运行它),丢弃所有那些不必要的索引(只保留一个),然后重新开始工作。