2013-01-31 33 views
0

我有一張300萬行6列的表格。問題是我的mysqld服務器不會爲任何查詢生成輸出,並且它會超時。
然後,我讀here過度索引可能涉及太多的交換數據從內存到磁盤,並可能導致服務器減慢。
所以我跑了查詢ALTER TABLE <Tbl_name> DROP INDEX <Index_name>;。此查詢已運行10個小時,尚未完成。超額索引一個MySQL表。我該如何補救?

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

告訴我們什麼'SHOW CREATE '輸出和什麼'EXPLAIN SELECT ...'輸出 – Kermit

+4

請發表您的表格定義。三百萬行聽起來不像是一個如此巨大的問題。我的猜測是,在10個小時之後,可以斷定某些事情已經破裂(除非mysqld運行在Atari或其他東西上)。 –

回答

1

也許做以下會更快:

  1. SELECT ... INTO OUTFILE第一
  2. 使用TRUNCATE TABLE刪除一切
  3. 修改表
  4. 使用LOAD到如果步驟2的時間太長,也許刪除表並重新創建它恢復數據

+0

我做了第1步和第2步。現在表中包含0行。但是我找不到outfile。我剛剛指定了名稱'db_bkup.txt',而且我在Windows中。 *我衷心希望我所有的數據都沒有消失* –

+0

您剛從嚴重問題中解救出來。感謝您的整潔解決方法。 –

相關問題