我希望MySQL使用索引对这些行进行排序。
SELECT
identity_ID
FROM
identity
WHERE
identity_modified > 1257140905
ORDER BY
identity_modified
但是,这是使用文件排序进行排序(不希望的)。
现在,如果我在这里省略了ORDER BY子句,则由于使用索引来满足WHERE子句,这些行的排序就简单了。
因此,我可以通过省略WHERE子句来获得所需的行为,但是我依靠MySQL的行为来使行按顺序到达是一致的,并且如果MySQL更改其内部行为,将来可能会get缩。
我该怎么办?有什么办法告诉MySQL,由于索引是按顺序存储的(b树),因此它不需要文件排序?
该表如下所示(简化):
CREATE TABLE IF NOT EXISTS `identity` (
`identity_ID` int(11) NOT NULL auto_increment,
`identity_modified` int(11) NOT NULL,
PRIMARY KEY (`identity_ID`),
KEY `identity_modified` (`identity_modified`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
最佳答案
到目前为止,我所拥有的解决方案是放弃ORDER BY
子句,并向查询中添加FORCE INDEX (identity_modified)
。从理论上讲,这应该确保按存储在索引中的顺序返回行。
这可能不是最佳做法,但这似乎是我想要的唯一可行方法。