首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在范围上优化MySQL顺序

在范围上优化MySQL顺序
EN

Stack Overflow用户
提问于 2009-11-11 05:34:47
回答 2查看 712关注 0票数 1

我希望MySQL使用索引对这些行进行排序。

代码语言:javascript
复制
SELECT
  identity_ID
FROM
  identity
WHERE
  identity_modified > 1257140905
ORDER BY
  identity_modified

然而,这是使用一个文件来排序(不受欢迎)。

现在,如果在这里省略ORDER子句,那么行的排序仅仅是使用索引来满足WHERE子句的结果。

因此,我可以通过省略WHERE子句来获得我想要的行为,但是我依赖于MySQL的行为是一致的,这样行才能有序地到达,而且如果MySQL更改了其内部行为,将来可能会受到刺激。

我该怎么办?有什么方法可以告诉MySQL,因为索引是按顺序(b-树)存储的,所以它不需要文件?

该表如下(简化):

代码语言:javascript
复制
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 ;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-11 22:59:49

到目前为止,我的解决方案是停止ORDER BY子句,并向查询中添加一个FORCE INDEX (identity_modified)。理论上,这应该确保按它们在索引中存储的顺序返回行。

这可能不是一个最佳的实践方法,但这似乎是唯一的方式,工作方式,我想。

票数 0
EN

Stack Overflow用户

发布于 2009-11-11 06:17:02

如果将表类型更改为INNODB,就不会有一个文件

更改表mydb.identity ENGINE = INNODB;

但我不确定您的查询是否有问题:http://forums.mysql.com/read.php?24,10738,10785#msg-10785

在操作之前和之后使用EXPLAIN运行原始查询。

http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1713252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档