我有一个表定义如下:
`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;
如果我对该语句执行解释,我会得到以下内容:
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
上面的行在对齐中搞砸并不重要。重要的部分是它使用文件排序,我不知道为什么。
由于此表中只有 5-10 行,因此感觉它并不重要,但文件名让我的open_tables有点香蕉,因为 MySQL(根据强大的互联网)为需要执行的每个文件排序查询打开两个表。
所以,很高兴在这里提供任何帮助。谢谢。
您的表在"序号"列上没有任何可能被使用的索引。 此外,由于您的 WHERE 子句位于固定的"1"值上,该值始终为真,但没有列可以比较,甚至没有 LOOK 索引来提供帮助,因此它无法选择任何东西......所以你正在经历一个文件排序...没有适用于 Where 的索引,也没有适用于 Order By 子句的索引。