0

300万行6列のテーブルがあります。問題は、私のmysqldサーバーがクエリの出力を生成せず、単にタイムアウトすることです。
次に、ここで、過剰なインデックス作成には、メモリからディスクへのデータのスワップが多すぎて、サーバーの速度が低下する可能性があることを読みました。
だから私はクエリを実行しましたALTER TABLE <Tbl_name> DROP INDEX <Index_name>;。このクエリは10時間実行されており、まだ完了していません。

  1. これは非常に長い間実行されると予想されますか?
  2. インデックスを削除/変更するためのより良い方法はありますか?

編集-SHOWCREATETABLE出力を追加しました

| 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 に答える