我有一个像这样定义的表:
`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开始有点像香蕉(根据到强大的互联网)为它需要执行的每个文件排序查询打开两个表。
所以,非常感谢这里的任何帮助。感谢。
答案 0 :(得分:0)
你的表在"序数"上没有任何索引。可能会被利用的列。此外,由于您的WHERE子句是固定的" 1"值始终为true,但没有要比较的列,甚至没有索引索引来帮助,它不能选择任何东西......所以你要经历一个文件排...没有索引适用于where和no索引适用于订购条款。