我有一張300萬行6列的表格。問題是我的mysqld服務器不會爲任何查詢生成輸出,並且它會超時。
然後,我讀here過度索引可能涉及太多的交換數據從內存到磁盤,並可能導致服務器減慢。
所以我跑了查詢ALTER TABLE <Tbl_name> DROP INDEX <Index_name>;
。此查詢已運行10個小時,尚未完成。超額索引一個MySQL表。我該如何補救?
- 這是否預計會持續這麼久?
- 有沒有更好的方法來刪除/改變我的指數?
編輯 - 添加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 |
告訴我們什麼'SHOW CREATE'輸出和什麼'EXPLAIN SELECT ...'輸出 –
Kermit
請發表您的表格定義。三百萬行聽起來不像是一個如此巨大的問題。我的猜測是,在10個小時之後,可以斷定某些事情已經破裂(除非mysqld運行在Atari或其他東西上)。 –