过度索引MySQL表。我该如何补救?

时间:2013-01-31 18:20:49

标签: mysql indexing

我有一张包含300万行和6列的表格。问题是我的mysqld服务器不会为任何查询生成输出,它只会超时。 我然后阅读here,过度索引可能涉及过多的数据从内存到磁盘的交换,并可能导致服务器速度变慢。
所以我运行了一个查询ALTER TABLE <Tbl_name> DROP INDEX <Index_name>;。此查询已运行10个小时,尚未完成。

  1. 这预计会持续这么久吗?
  2. 有没有更好的方法来删除/更改我的索引?
  3. 编辑 - 添加了SHOW CREATE TABLE输出

    | Sample | CREATE TABLE `sample` (
      `ID` int(11) NOT NULL AUTO_INCREMENT,
      `FiMD5` varchar(32) NOT NULL,
      `NoMD5` varchar(32) NOT NULL,
      `SeMD5` varchar(32) NOT NULL,
      `SeesMD5` varchar(32) NOT NULL,
      `ImMD5` varchar(32) NOT NULL,
      `Ovlay` tinyint(1) NOT NULL DEFAULT '1',
      PRIMARY KEY (`ID`),
      KEY `FiMD5_3` (`FiMD5`),
      KEY `ID` (`ID`),
      KEY `ID_2` (`ID`),
      KEY `pIndex` (`FiMD5`),
      KEY `FiMD5_` (`FiMD5`,`NoMD5`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3073630 DEFAULT CHARSET=latin1 |
    

1 个答案:

答案 0 :(得分:1)

也许以下内容会更快:

  1. SELECT ... INTO OUTFILE首先
  2. 使用TRUNCATE TABLE删除所有内容
  3. 修改表格
  4. 使用LOAD恢复数据
  5. 如果第2步需要太长时间,可能会丢弃表并重新创建它。