我希望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)。从理论上讲,这应该确保按存储在索引中的顺序返回行。

这可能不是最佳做法,但这似乎是我想要的唯一可行方法。

10-08 04:37