MySQL:为什么简单查询不使用索引,执行filesort

时间:2014-12-05 19:39:26

标签: mysql filesort

我有一个像这样定义的表:

`id` int(10) NOT NULL AUTO_INCREMENT,
`slug` varchar(150) NOT NULL,
`title` varchar(150) NOT NULL,
`description` text NOT NULL,
`ordinal` int(10) NOT NULL DEFAULT '0'

我们称之为 t1

t1 中,我有序数的索引。

这个表只包含几行,它是一个定义表,所以我通常这样做,按照我想要的顺序得到定义

SELECT * FROM t1 WHERE 1 ORDER BY ordinal;

如果我在该声明中执行 EXPLAIN ,我会收到以下信息:

id? select_type?    table?  partitions? type?   possible_keys?  key?    key_len?    ref?    rows?   Extra?
1   SIMPLE  t1  NULL    ALL NULL    NULL    NULL    NULL    5   Using where; Using filesort

上面的行被搞砸了,这并不重要。重要的是它使用filesort,我无法弄清楚原因。

由于此表中只有5-10行,因此感觉它不重要但是文件输出使我的 open_tables 从MySQL开始有点像香蕉(根据到强大的互联网)为它需要执行的每个文件排序查询打开两个表。

所以,非常感谢这里的任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

你的表在"序数"上没有任何索引。可能会被利用的列。此外,由于您的WHERE子句是固定的" 1"值始终为true,但没有要比较的列,甚至没有索引索引来帮助,它不能选择任何东西......所以你要经历一个文件排...没有索引适用于where和no索引适用于订购条款。