0

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

  1. 这预计会运行这么长时间吗?
  2. 有没有更好的方法来删除/更改我的索引?

编辑 - 添加了 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 |
4

1 回答 1

1

也许执行以下操作会更快:

  1. SELECT ... INTO OUTFILE第一的
  2. 用于TRUNCATE TABLE删除所有内容
  3. 修改表格
  4. 用于LOAD恢复数据

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

于 2013-01-31T18:26:59.953 回答