2015-05-11 38 views
1

我有一个表中有50行。它是一个将文档ID链接到文档类型的表格。它有一个主键,没有索引,名称的字段,1个整数字段,几个布尔字段。查询:非常小的桌子挂在“排序结果”

SELECT id, name FROM documentTypes WHERE deprecated != 1 order by name asc 

已经对“排序结果”进行了7分钟的优化。 (这是一个旧表,从来没有这样做过)而不是表本身,这似乎表明这与我的服务器或一些切线相关的表有一些问题。 什么情况会导致一个非常小的表挂在“排序结果”?

这是一个数据透视表,但在这种情况下,表正在被查询,以生成一个文件列表。

下面是表:

CREATE TABLE `documentTypes` (
    `id` INT(3) NOT NULL, 
    `name` VARCHAR(1200) NOT NULL, 
    `hidden` INT(1) NOT NULL DEFAULT '0', 
    `numAllowedPer` INT(2) NOT NULL, 
    `pref1` INT(1) NOT NULL DEFAULT '0', 
    `pref2` INT(1) NOT NULL DEFAULT '0', 
    `deprecated` INT(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=INNODB DEFAULT CHARSET=latin1 

和结果EXPLAIN

EXPLAIN SELECT id, name FROM documentTypes WHERE deprecated != 1 ORDER BY name asc 

possible_keys: NULL 
rows: 50 
Extra: Using where; Using filesort 

通过或者不通过deprecated索引它不应该采取这种长时间运行的查询。由于只有50行,所以差异应该可以忽略不计。

UPDATE

我相当肯定它无关,与表本身。问题是,服务器上会发生什么会导致此类问题?

+0

是的,这是很可疑的。这是InnoDB ...你有没有'mysqldump'桌子并重建它? https://dev.mysql.com/doc/refman/5.0/en/rebuilding-tables.html –

+0

它总是这么长时间? – Aris

+0

@Aris不是表已经出现多年没有问题 – chiliNUT

回答

1

运行以下查询,

REPAIR TABLE documentTypes 

OPTIMIZE TABLE documentTypes 
+0

没有区别,修复报表表格很好 – chiliNUT

+0

REPAIR TABLE isn'由InnoDB支持,这就是为什么我建议倾销和重新加载它。 –

+0

对不起,我的意思是“检查表”报道它很好。我相信桌子本身很好 – chiliNUT