首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对有限制的大表按主键排序的MySQL优化

问对有限制的大表按主键排序的MySQL优化
EN

Stack Overflow用户
提问于 2013-09-17 06:29:46
回答 1查看 88关注 0票数 0

很抱歉有个隐秘的标题...我的问题是:

我有一个mysql查询,在最简单的形式下,它看起来像这样:

代码语言:javascript
复制
SELECT * FROM table 
WHERE _SOME\_CONDITIONS_
ORDER BY `id` DESC
LIMIT 50

如果没有LIMIT子句,查询将返回大约50,000行,但是我只对前50行感兴趣。现在我意识到,因为我添加了ORDER BY位,所以MySQL必须创建一个临时表并在其中加载所有结果,然后对50,000个结果进行排序,只有这样它才能返回前50个结果。

当我将此查询的性能与不使用ORDER BY的查询进行比较时,得到的结果是1.8秒与0.02秒的惊人差异。

考虑到id会自动递增主键,我认为应该有一个优雅的解决方案来解决我的问题。有吗?

EN

回答 1

Stack Overflow用户

发布于 2013-09-17 06:44:23

SOME_CONDITIONS是否可以为查询提供一个ID范围?至少,您可以在排序之前限制添加到临时表中的行数。

例如:

代码语言:javascript
复制
SELECT * FROM table 
WHERE _SOME\_CONDITIONS_
AND id BETWEEN 1 AND 50;

或者,如果SOME_CONDITIONS阻止您在结果中对in的范围做出这种假设,则可以使用嵌套查询来提供最小和最大in。

如果性能真的那么重要,我会通过为前50个结果创建另一个表或缓存并单独更新它来对数据进行反规范化。

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

https://stackoverflow.com/questions/18838384

复制
相关文章

相似问题

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