索引过多的MySQL表。我如何补救?

索引过多的MySQL表。我如何补救?,mysql,indexing,Mysql,Indexing,我有一个300万行6列的表。问题是我的mysqld服务器不会为任何查询生成输出,它只会超时。 然后我了解到,过度索引可能会涉及太多从内存到磁盘的数据交换,并可能导致服务器速度降低。 所以我运行了一个查询altertabledropindex。此查询已运行10小时,尚未完成 这会持续这么长时间吗 有没有更好的方法来删除/更改我的索引 编辑-添加显示创建表输出 | Sample | CREATE TABLE `sample` ( `ID` int(11) NOT NULL AUTO_INCREM

我有一个300万行6列的表。问题是我的mysqld服务器不会为任何查询生成输出,它只会超时。
然后我了解到,过度索引可能会涉及太多从内存到磁盘的数据交换,并可能导致服务器速度降低。
所以我运行了一个查询
altertabledropindex。此查询已运行10小时,尚未完成

  • 这会持续这么长时间吗
  • 有没有更好的方法来删除/更改我的索引
  • 编辑-添加显示创建表输出

    | 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 |
    

    也许采取以下措施会更快:

  • 选择。。。首先输入输出文件
  • 使用
    TRUNCATE TABLE
    删除所有内容
  • 修改表格
  • 使用
    LOAD
    恢复数据

  • 如果步骤2花费的时间太长,可能会删除表格并重新创建。

    向我们展示什么
    Show CREATE
    outputs和什么
    EXPLAIN SELECT…
    outputs请发布表格定义。三百万行听起来不应该是个大问题。我的猜测是,10个小时后,可以安全地得出结论,有些东西坏了(除非mysqld是在Atari上运行的)。现在该表包含0行。但我找不到出口。我刚刚指定了名称'db_bkup.txt',我在Windows中。我真诚地希望我所有的数据没有消失,你刚刚从严重的问题中拯救出来。谢谢你的巧妙变通。