我希望MySQL使用索引对这些行进行排序。
SELECT
identity_ID
FROM
identity
WHERE
identity_modified > 1257140905
ORDER BY
identity_modified然而,这是使用一个文件来排序(不受欢迎)。
现在,如果在这里省略ORDER子句,那么行的排序仅仅是使用索引来满足WHERE子句的结果。
因此,我可以通过省略WHERE子句来获得我想要的行为,但是我依赖于MySQL的行为是一致的,这样行才能有序地到达,而且如果MySQL更改了其内部行为,将来可能会受到刺激。
我该怎么办?有什么方法可以告诉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 ;发布于 2009-11-11 22:59:49
到目前为止,我的解决方案是停止ORDER BY子句,并向查询中添加一个FORCE INDEX (identity_modified)。理论上,这应该确保按它们在索引中存储的顺序返回行。
这可能不是一个最佳的实践方法,但这似乎是唯一的方式,工作方式,我想。
发布于 2009-11-11 06:17:02
如果将表类型更改为INNODB,就不会有一个文件
更改表mydb.identity ENGINE = INNODB;
但我不确定您的查询是否有问题:http://forums.mysql.com/read.php?24,10738,10785#msg-10785
在操作之前和之后使用EXPLAIN运行原始查询。
https://stackoverflow.com/questions/1713252
复制相似问题